मैक्रो नकल खाली कोशिकाओं


0

मेरे पास यह मैक्रो है:

शीट 1 में यह कॉलम A में सभी मानों का चयन करता है, फिर केवल स्थिरांक का चयन करें, फिर फ़िल्टर का चयन करें और कॉलम A में फ़िल्टर किए गए मानों की प्रतिलिपि बनाएँ और इसे किसी अन्य सूची में पेस्ट करें। फिर फिर से, लेकिन अगले कॉलम के साथ।

समस्या यह है कि फ़िल्टर किए गए कॉलम खाली हो जाते हैं। जब कुछ मान होते हैं, तो कोई प्रोब्लम नहीं होती है, लेकिन जब फ़िल्टर किया गया कॉलम खाली होता है, तो Im रनटाइम एरर हो जाता है। मैं इसे कैसे हल कर सकता हूं?

सिर्फ छोटा त्वरित उदाहरण

यहाँ मेरा मैक्रो केवल कॉलम A और कॉलम B की प्रतिलिपि बनाता है, और जब यह कॉलम CI को मिलता है तो त्रुटि मिलती है और यह जारी नहीं रहेगा। फ़िल्टर करने के बाद

अपडेट:

पूर्व। 1:

'   PO DC2 O
Sheets("Celkový harmonogram").Select
ActiveWorkbook.SlicerCaches("Průřez_dispečer32111").ClearManualFilter
Range("Tabulka141121518[13]").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
With ActiveWorkbook.SlicerCaches("Průřez_dispečer32111")
    .SlicerItems("Bodnariucová Renáta").Selected = False
    .SlicerItems("Kajer Roman").Selected = True
End With

If Application.CountIf(Selection, "<>0") < 1 Then GoTo Line442
Application.CutCopyMode = False
Selection.Copy
Sheets("jednotlivci").Select
Range("Y6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

'   UT DC2 R
Line442:
Sheets("Celkový harmonogram").Select
ActiveWorkbook.SlicerCaches("Průřez_dispečer32111").ClearManualFilter
Range("Tabulka141121518[14]").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
With ActiveWorkbook.SlicerCaches("Průřez_dispečer32111")
...

पूर्व। 2: (खाली कोशिकाओं के साथ त्रुटि)

If Application.CountIf(myRange, "<>0") > 0 Then
Application.CutCopyMode = False
Selection.Copy
Sheets("jednotlivci").Select
Range("Y6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Else: GoTo Line442
End If

पूर्व। 3: ("if .." लाइन पर टाइप बेमेल त्रुटि

If Application.CountIf(Selection, "<>0") < 1 Then GoTo Line442

Application.CutCopyMode = False
Selection.Copy
Sheets("jednotlivci").Select
Range("Y6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

स्तंभ फ़िल्टर का परीक्षण करें, यदि खाली उप सब
यस

Im शुरुआत VBA के साथ, इस मैक्रो Ive ने रिकॉर्डिंग के साथ किया। क्या आप कृपया मुझे उस परीक्षा में मदद कर सकते हैं? मुझे लगता है कि "इफ सिलेक्शन =" "तो गो टू एंड" या ऐसा कुछ? अग्रिम धन्यवाद
रोमन

लिखने से पहले: अगर शीट्स ("शीट 1")। रेंज ("एफ 2")। मान <> "" फिर एंड एंड एफआईएफ अंत में एफ 2 आपके फिल्टर की पहली शर्त है शीट 1 वह शीट है जहां आपने फ़िल्टर लिखा था
yass

मैंने पोस्ट में कोड को एडिट किया। जब मैं इसे चलाता हूं, मुझे त्रुटि मिलती है। उस में कुछ है अगर ... और बस जोड़ने के लिए - सबसे पहले, UNfiltered कॉलम में, डेटा हैं, लेकिन रिक्त कक्ष भी हैं, और इसलिए जब मैं इसे फ़िल्टर करता हूं और केवल रिक्त कक्ष होता है, तो यह काम नहीं कर रहा है।
रोमन Romanयद्यक

इसके अलावा, मैं केवल इस से अधिक कोड है। पूर्ण मैक्रो कोड में मेरे पास 15 कॉलम से डेटा कॉपी करने के लिए कोड है, यह सिर्फ एक कॉलम के लिए है।
रोमन Romanयद्यक

जवाबों:


0

मैंने आपके कोड में तीन लाइन जोड़ीं। वे यह देखने के लिए जांच करते हैं कि क्या आपका चयन / सीमा खाली है और यदि ऐसा है तो उप से बाहर निकलें। आपको इस कोड को चलाने की आवश्यकता है और हो सकता है कि आप पहले से जोड़े गए स्टेटमेंट को हटा दें ( .Valueइससे मुझे कोई मतलब नहीं है)। इसके अलावा, आपको यह जाँचने की ज़रूरत है कि मैंने जो बयान दिया है, वह आपके प्रश्न में पहले बताई गई मूल त्रुटि को हल करता है (सबसे अधिक संभवत: आप केवल तीसरे वाले को समाप्त करेंगे)।

Sheets("Celkový harmonogram").Select
ActiveWorkbook.SlicerCaches("Průřez_dispečer32111").ClearManualFilter
Range("Tabulka141121518[13]").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select

'This is the part added (if you get the error in the following lines):
If Application.CountIf(Selection, "<>0") < 1 Then Exit Sub
'This will exit the sub; you can also "GoTo" a line as error handler or _
'Skip one step of a loop as you mentioned you are doing this for number of columns.

With ActiveWorkbook.SlicerCaches("Průřez_dispečer32111")
    .SlicerItems("Bodnariucová Renáta").Selected = False
    .SlicerItems("Kajer Roman").Selected = True
End With

'Also this cause it's not clear where you exactly get the error:
If Application.CountIf(Selection, "<>0") < 1 Then Exit Sub
'OR
If Application.CountIf(Sheets("Celkový harmonogram").Range("Tabulka141121518[13]") _
 , "<>0") < 1 Then Exit Sub


If Sheets("Celkový harmonogram").Range("Tabulka141121518[13]").Value <> "" Then
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("jednotlivci").Select
    Range("Y6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End If

इसके बजाय Exit Subआप इस तरह से दूसरी लाइन पर जा सकते हैं:

If Criteria Then 
isError = True
GoTo ErrorHandler
End If

'Rest of the code in case of no error
'...

ErrorHandler:
If IsError Then
'Code you want to be performed in case of error
End If

सूचना: कोई त्रुटि नहीं होने की स्थिति में रनिंग एरर हैंडलर से बचने के लिए दूसरा इफ-स्टेटमेंट जोड़ा जाता है (VBA सब कुछ चलाता है और एररहैंडलर ब्लॉक को छोड़ नहीं देगा)।


धन्यवाद, हो सकता है कि दूसरा अगर काम कर सकता है, लेकिन एंड सब को न छोड़ें, लेकिन किसी अन्य लाइन पर जाने के लिए इसे कैसे संपादित किया जाए?
रोमन Romanयड्ड

@ Roman @ydyk लिखते हैं GoTo SkipLineऔर फिर अपने इच्छित SkipLine:अनुभाग की शुरुआत में होते हैं। शीघ्र ही इसे मेरे कोड में जोड़ देगा।
MM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.