2010-07-12 13 views
32

मैं वीबीए से एक्सेल वर्कशीट की शीर्ष पंक्ति को प्रोग्रामेटिक रूप से फ्रीज करना चाहता हूं। अंतिम लक्ष्य एक्सेल 2007 में View > Freeze Panes > Freeze Top Row कमांड के समान प्रभाव उत्पन्न करना है ताकि वर्कशीट की शीर्ष पंक्ति जमे हुए हो और उपयोगकर्ता डेटाशीट की शीर्ष पंक्ति देख सकें, भले ही वे डेटा के माध्यम से स्क्रॉल करें।एक्सेल 2007 वीबीए में एक्सेल वर्कशीट की शीर्ष पंक्ति को प्रोग्रामेटिक रूप से कैसे जमा किया जा सकता है?

उत्तर

30
Rows("2:2").Select 
ActiveWindow.FreezePanes = True 

एक अलग प्रभाव के लिए एक अलग सीमा का चयन करें, वैसे ही आप मैन्युअल रूप से करेंगे। "फ्रीज टॉप रो" वास्तव में एक्सेल 2007 (और ऊपर) में एक शॉर्टकट नया है, इसमें एक्सेल के पुराने संस्करणों की तुलना में कोई अतिरिक्त कार्यक्षमता नहीं है।

+5

ऐसा लगता है कि स्क्रीन अपडेटिंग काम करने के लिए इस पर काम करना है, लेकिन अन्यथा महान है। धन्यवाद! –

+2

मैं स्पष्ट हूं कि शीर्ष पंक्ति का चयन करके आप शीर्ष पंक्ति को कैसे ठंडा कर रहे हैं। शीर्ष पंक्ति को फ्रीज करने के लिए, चयन 'पंक्तियां (2) 'या' पंक्तियां ("2: 2") होनी चाहिए। वर्कशीट के चार चतुर्भुज विभाजन में 'पंक्ति ("1: 1")' का चयन करना। – Jeeped

+0

@ जीपड एम) - बिल्कुल! अच्छा खोज, धन्यवाद! – Tomalak

12

तोमालक ने आपको पहले ही एक सही उत्तर दिया है, लेकिन मैं यह जोड़ना चाहूंगा कि ज्यादातर बार जब आप यूजर इंटरफेस में एक निश्चित कार्रवाई करने के लिए आवश्यक वीबीए कोड जानना चाहते हैं तो यह रिकॉर्ड करना एक अच्छा विचार है मैक्रो।

इस मामले में रिबन के डेवलपर टैब पर रिकॉर्ड मैक्रो पर क्लिक करें, शीर्ष पंक्ति को फ्रीज करें और फिर रिकॉर्डिंग को रोकें।

With ActiveWindow 
    .SplitColumn = 0 
    .SplitRow = 1 
End With 
ActiveWindow.FreezePanes = True 
+0

हां। यह सही जवाब है। वर्कशीट के किसी भी भाग का चयन करने की आवश्यकता नहीं है। – HuckIt

+0

अच्छा जवाब है, लेकिन मुझे उत्सुकता है कि आखिरी कथन को साथ में क्यों नहीं रखा गया था ... स्टेटमेंट के साथ समाप्त करें। – Jeeped

+0

@ जीपड: यह एक्सेल मैक्रो रिकॉर्डर का सिर्फ कच्चा आउटपुट है। बेशक, आप 'साथ' ब्लॉक में लाइन शामिल कर सकते हैं। –

13

दर्ज की गई मैक्रो के साथ समस्या यह अंतर्निहित कार्रवाई के साथ समस्या के रूप में एक ही है: एक्सेल निम्नलिखित मैक्रो आप के लिए दर्ज की गई जो भी काम करता होगा एक्सेल शीर्ष दिखाई फ्रीज करने के लिए चुनता पंक्ति, वास्तविक शीर्ष पंक्ति के बजाय जहां हेडर जानकारी मिल सकती है।

इस मामले में एक मैक्रो का उद्देश्य वास्तविक शीर्ष पंक्ति को स्थिर करना है। जब मैं पंक्ति # 405592 देख रहा हूं और मुझे कॉलम के लिए हेडर की जांच करने की आवश्यकता है (क्योंकि जब मैं फ़ाइल खोलता हूं तो पंक्तियों को फ्रीज करना भूल जाता है), मुझे शीर्ष पर स्क्रॉल करना होगा, शीर्ष पंक्ति को फ्रीज करना होगा, फिर अपना रास्ता वापस ढूंढना होगा पंक्ति # 405592 फिर से। चूंकि मेरा मानना ​​है कि यह बेवकूफ व्यवहार है, मैं चाहता हूं कि मैक्रो इसे सही करे, लेकिन जैसा कि मैंने कहा, रिकॉर्ड किया गया मैक्रो सिर्फ एक ही बेवकूफ व्यवहार की नकल करता है।

मैं कार्यालय 2011 (2 मिनट बाद) का उपयोग कर रहा के लिए मैक ओएस एक्स शेर

अद्यतन:

मैं यहाँ एक समाधान पाया: http://www.ozgrid.com/forum/showthread.php?t=19692

Dim r As Range 
Set r = ActiveCell 
Range("A2").Select 
With ActiveWindow 
    .FreezePanes = False 
    .ScrollRow = 1 
    .ScrollColumn = 1 
    .FreezePanes = True 
    .ScrollRow = r.Row 
End With 
r.Select 
+2

मेरे जैसे किसी अन्य नए शौक के लिए: मैं रेंज ("ए 9") को और कुछ भी बदले बिना शीर्ष 8 पंक्तियों (जहां मेरी रिपोर्ट "डैशबोर्ड" रहता है) को फ्रीज करने में सक्षम था। – Sean

7

बस एक ही समस्या मारा .. किसी कारण से, फ्रीजपेन्स कमांड ने स्क्रीन के केंद्र में क्रॉसहेयर दिखाई देने का कारण बना दिया। यह शुरू हो गया है कि मैंने स्क्रीन अपडेटिंग बंद कर दिया था! निम्न कोड के साथ हल:

Application.ScreenUpdating = True 
Cells(2, 1).Select 
ActiveWindow.FreezePanes = True 

अब यह ठीक काम करता है।

2
Rows("2:2").Select 
ActiveWindow.FreezePanes = True 

शीर्ष पंक्ति को स्थिर करने का यह सबसे आसान तरीका है। FreezePanes के लिए नियम यह है कि यह आपके द्वारा चुने गए सेल से ऊपरी बाएं कोने को फ्रीज करेगा। उदाहरण के लिए, यदि आप सी 10 को हाइलाइट करते हैं, तो यह कॉलम बी और सी, पंक्तियों 9 और 10 के बीच जमा हो जाएगा। इसलिए जब आप पंक्ति 2 को हाइलाइट करते हैं, तो यह वास्तव में पंक्तियों 1 और 2 के बीच स्थिर होता है जो शीर्ष पंक्ति है।

इसके अलावा, .SplitColumn या .SplitRow आपकी खिड़की को विभाजित कर देगा जब आप इसे अनफ़्रीज़ करते हैं जो मुझे पसंद नहीं है।

3

इस प्रश्न को एक्सेल के स्वयं के वीबीए के बाहर उपयोग के दायरे में विस्तारित करने के लिए, ActiveWindow property को Excel.Application object के बच्चे के रूप में संबोधित किया जाना चाहिए। Access से एक Excel कार्यपुस्तिका बनाने के लिए

उदाहरण:

एक और कार्यालय आवेदन के VBA प्रोजेक्ट में Excel.Application object का उपयोग करना (अपने स्वयं के संस्करण के लिए या समतुल्य) माइक्रोसॉफ्ट एक्सेल 15.0 वस्तु पुस्तकालय जोड़ने के लिए की आवश्यकता होगी।

Option Explicit 

Sub xls_Build__Report() 
    Dim xlApp As Excel.Application, ws As Worksheet, wb As Workbook 
    Dim fn As String 

    Set xlApp = CreateObject("Excel.Application") 
    xlApp.DisplayAlerts = False 
    xlApp.Visible = True 

    Set wb = xlApp.Workbooks.Add 
    With wb 
     .Sheets(1).Name = "Report" 
     With .Sheets("Report") 

      'report generation here 

     End With 

     'This is where the Freeze Pane is dealt with 
     'Freezes top row 
     With xlApp.ActiveWindow 
      .SplitColumn = 0 
      .SplitRow = 1 
      .FreezePanes = True 
     End With 

     fn = CurrentProject.Path & "\Reports\Report_" & Format(Date, "yyyymmdd") & ".xlsx" 
     If CBool(Len(Dir(fn, vbNormal))) Then Kill fn 
     .SaveAs FileName:=fn, FileFormat:=xlOpenXMLWorkbook 
    End With 

Close_and_Quit: 
    wb.Close False 
    xlApp.Quit 
End Sub 

कोर प्रक्रिया वास्तव में सिर्फ पूर्व में सबमिट जवाब की पुनरावृत्ति है, लेकिन मैंने सोचा कि यह महत्वपूर्ण था ActiveWindow से निपटने के लिए कैसे जब आप Excel के अपने VBA के भीतर नहीं हैं प्रदर्शित करने के लिए। हालांकि यहां कोड वीबीए है, यह सीधे अन्य भाषाओं और प्लेटफार्मों के लिए ट्रांसक्रिप्ट करने योग्य होना चाहिए।

+0

आप 'सेट xlApp = नया एक्सेल। एप्लिकेशन' का उपयोग भी कर सकते हैं, या यहां तक ​​कि 'Dim xlApp के रूप में नया Excel.Aplication' भी उपयोग कर सकते हैं। –

संबंधित मुद्दे