2013-03-20 143 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

相关问题