2013-03-20 152 views
0

我已經編寫了一個Excel VBA,用於將所選單元格中的數據從一個工作簿工作表複製到另一個工作簿工作表。在某些VBA粘貼空值後,粘貼某些值後,它在某些單元格上工作良好。我的意思是儘管源單元格不是空的,但它正在粘貼空值。我已經把斷點和看到,但價值在那裏。請幫我解決這個問題。Excel VBA Selection.Copy正在粘貼目標工作簿工作表中的空值

代碼如下。

Set objClickScriptWB = objExcelWB.Workbooks.Open(SourceWBPath) 
    For intSheet = 9 To 12 'objClickScriptWB.Worksheets.Count 
     If InStr(1, objClickScriptWB.Worksheets(intSheet).Name, "SC", vbTextCompare) > 0 Then 
      blnScriptSheet = 1 
      objClickScriptWB.Worksheets(intSheet).Activate 
      For r = 24 To objClickScriptWB.Worksheets(intSheet).UsedRange.Rows.Count 
        If Trim(LCase(objClickScriptWB.Worksheets(intSheet).Cells(r, 6).Value)) <> Trim(LCase("Transaction")) And Trim(LCase(objClickScriptWB.Worksheets(intSheet).Cells(r, 6).Value)) <> Empty And objClickScriptWB.Worksheets(intSheet).Cells(r, 6).MergeArea.Cells.Count = 1 Then 
    objClickScriptWB.Worksheets(intSheet).Cells(r, 6).Select 



           If blnCompSht = 0 Then 
            Set objComparisonSheet = ThisWorkbook.Worksheets.Add 
            objComparisonSheet.Name = "Comparison" 
            objComparisonSheet.Activate 

            objComparisonSheet.Cells(2, 2).Value = "Clickscript Transaction names" 

            i = 3 
            objExcelWB.Selection.Copy 
            objComparisonSheet.Activate 
            objComparisonSheet.Cells(i, 2).Select 
            'Sheet3.Range("B2").Select 
            'objComparisonSheet.Range("B" & i).PasteSpecial Paste:=xlPasteValues 
            objComparisonSheet.Paste 
            'Sheet2.Range("G2").Cells 
            i = i + 1 
            blnCompSht = 1 
            'Application.Wait (Now + TimeValue("00:00:01")) 
           ElseIf blnCompSht = 1 Then 
            ThisWorkbook.Worksheets("Comparison").Activate 

            Dim LastRow As Integer 
            For intRow = 2 To ThisWorkbook.Worksheets("Comparison").Rows.Count 
             If ThisWorkbook.Worksheets("Comparison").Cells(intRow, 2).Value = Empty Then 
              i = intRow 
              Exit For 
             End If 

            Next 

            objExcelWB.Selection.Copy 
            ThisWorkbook.Worksheets("Comparison").Cells(i, 2).Select 
            'ThisWorkbook.Worksheets("Comparison").Range("B" & intRow).PasteSpecial Paste:=xlPasteValues 
            ThisWorkbook.Worksheets("Comparison").Paste 
            i = i + 1 
            'Application.Wait (Now + TimeValue("00:00:01")) 
           End If 

          'End If 
         'Next 
       'Call CompareTxnNames(objClickScriptWB.Worksheets(intSheet).Name) 
        End If 
       'Next 
      Next 

     End If 
    Next 
End Sub 

請幫我

感謝

+0

你的代碼很長,不清楚問題是。我通過Record Macro來爲你提供一個你想要複製的建議。然後,你只需要編輯已經由宏自動生成的代碼,如你所願 – Kasnady 2013-03-20 08:40:34

+0

嗨你的Sub的開始缺失,腳本開始時是否還有更多缺失?這可能是一個有趣的問題,但我通常在代碼的開始處將所有變量和對象變暗,這樣我就可以很好地瞭解所有這些變量和對象。 – 2013-03-20 09:11:13

+0

'.Value = Empty'不是空單元格的正確檢查。見http://stackoverflow.com/questions/1983649/how-do-i-express-if-value-is-not-empty-in-the-vba-language – 2013-03-20 09:13:03

回答

0

你可以也直接一個單元格的值與這樣的代碼應用到其他細胞:

CellTarget.Value2 = CellSource.Value2 

或者你的情況:

objComparisonSheet.Cells(i, 2).Value2 = objClickScriptWB.Worksheets(intSheet).Cells(r, 6).Value2 

旁註:

養成使用值2爲的習慣是比較值的單元格這與格式應用到它的價值的真正價值。後者較慢,在日期值的情況下,如果您不在Excel中使用美國的dateformat,可能會給出錯誤的日期和月份。

+0

謝謝K_B,你的解決方案像gem一樣工作。我從昨天起就在尋找這個。順便說一句'Value2''也可以幫助我們只粘貼值而不復制單元格格式。再次感謝 – 2013-03-20 10:02:46

+0

順便說一句,從前面的代碼中,我並沒有理解,在循環運行期間,值從某個時間點停止粘貼。可能是什麼原因? – 2013-03-20 10:05:38

相關問題