Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA复制字符串并粘贴科学符号_Vba_Excel - Fatal编程技术网

VBA复制字符串并粘贴科学符号

VBA复制字符串并粘贴科学符号,vba,excel,Vba,Excel,我对下面的代码有问题。 代码应该复制长字符串。 源文件将此内容作为字符串。大约50个字符长。有数字和字母混合 问题是,对于某些粘贴的范围,它们采用的是科学记数法,其他函数无法查找 下面是代码的相关部分 For i = 1 To Columns.Count If Left(ActiveWorkbook.Sheets(1).Cells(7, i).Value, 4) = "1068" Then ActiveWorkbook.Sheets(1).Range(Ac

我对下面的代码有问题。 代码应该复制长字符串。 源文件将此内容作为字符串。大约50个字符长。有数字和字母混合

问题是,对于某些粘贴的范围,它们采用的是科学记数法,其他函数无法查找

下面是代码的相关部分

For i = 1 To Columns.Count        
    If Left(ActiveWorkbook.Sheets(1).Cells(7, i).Value, 4) = "1068" Then
        ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).Copy _
        Destination:=ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)                   
    End If
Next i
有没有办法只粘贴这样一个范围的值? 我尝试了“粘贴值”方法,但得到的是VBA错误消息,而不是:

ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).Copy _
    Destination:=ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)                   
改为这样做:

ActiveWorkbook.Sheets(1).Range( _
          ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), _
          ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown) _
                              ).Copy

ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  

Application.CutCopyMode = False
或者,我建议采用以下方法使代码更清晰:

Dim rngCopyFrom as Range
Dim rngCopyTo as Range
Set rngCopyFrom = ActiveWorkbook.Sheets(1).Range( _
              ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), _
              ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown) _
                              )
Set rngCopyTo = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
rngCopyFrom.Copy
rngCopyTo.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode=False 
而不是:

ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).Copy _
    Destination:=ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)                   
改为这样做:

ActiveWorkbook.Sheets(1).Range( _
          ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), _
          ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown) _
                              ).Copy

ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  

Application.CutCopyMode = False
或者,我建议采用以下方法使代码更清晰:

Dim rngCopyFrom as Range
Dim rngCopyTo as Range
Set rngCopyFrom = ActiveWorkbook.Sheets(1).Range( _
              ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), _
              ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown) _
                              )
Set rngCopyTo = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
rngCopyFrom.Copy
rngCopyTo.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode=False 

更改单元格的格式

您可以使用以下方法进行更正:

.NumberFormat = "##0_)"
以下是如何管理格式的示例:

ActiveWorkbook.Sheets(1).Cells(7, i).NumberFormat = "##0_)"
ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).NumberFormat = "##0_)"
ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).NumberFormat = "##0_)"

更改格式后,科学符号不应显示。

更改单元格的格式

您可以使用以下方法进行更正:

.NumberFormat = "##0_)"
以下是如何管理格式的示例:

ActiveWorkbook.Sheets(1).Cells(7, i).NumberFormat = "##0_)"
ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).NumberFormat = "##0_)"
ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).NumberFormat = "##0_)"

更改格式后,不应显示科学符号。

要将数字字符串转换为数值,请执行以下操作:

t = ActiveWorkbook.Sheets(1).Range(Cells(7, I).End(xlUp), _
ActiveWorkbook.Sheets(1).Cells(7, I).End(xlDown) _
).Value
Set dest = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Cells(1).Resize(UBound(t))
dest.NumberFormat = ""
dest.FormulaLocal = t

要将数字字符串转换为数值,请执行以下操作:

t = ActiveWorkbook.Sheets(1).Range(Cells(7, I).End(xlUp), _
ActiveWorkbook.Sheets(1).Cells(7, I).End(xlDown) _
).Value
Set dest = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Cells(1).Resize(UBound(t))
dest.NumberFormat = ""
dest.FormulaLocal = t

假设您有多行数据,这段代码对我来说似乎很奇怪,因为您开始检查第7行A列中的1068行,然后如果找到,您从上到下选择每个单元格并粘贴到A列的底部?然后你重复其余的专栏?是的,这很奇怪。但我复制的报告太不规则了,从第三排开始一次,从第五排开始另一次。因此,第7行是最接近的,并且一定要同时满足数据。如果报告是常规的,比如从第一行开始,我肯定会使用第二行和第二行。不幸的是,您对问题的描述没有向任何人提供您想要做的具体内容。复制“长字符串”可能与复制单元格不同。请尝试给出一个示例,其中您有5行,第3行和第5行在A列和C列中有您的“1068”。您希望为第一行复制什么,以及您希望粘贴到哪里。那就给上校解释一下,你想让我怎么展示?其他信息是,源文件是由其他宏程序转换为xlsx的csv文件假设您有多行数据,此代码对我来说似乎很奇怪,因为您开始检查第7行a列的1068,然后如果找到,则从上到下选择每个单元格并粘贴到a列的底部?然后你重复其余的专栏?是的,这很奇怪。但我复制的报告太不规则了,从第三排开始一次,从第五排开始另一次。因此,第7行是最接近的,并且一定要同时满足数据。如果报告是常规的,比如从第一行开始,我肯定会使用第二行和第二行。不幸的是,您对问题的描述没有向任何人提供您想要做的具体内容。复制“长字符串”可能与复制单元格不同。请尝试给出一个示例,其中您有5行,第3行和第5行在A列和C列中有您的“1068”。您希望为第一行复制什么,以及您希望粘贴到哪里。那就给上校解释一下,你想让我怎么展示?其他信息是,源文件是一个csv文件转换成xlsx的其他宏谢谢你,我会回来给你,一旦我尝试出来嗨,对不起,它不工作。它应该粘贴“10303389607BFTAVAVDJ020170206Z009QWAR1”,但它粘贴了“1.01E+41”,我知道我的代码只用于没有文本的数字。然而,你现在的状况没有意义。检查单元格的引用。你可以用一根柱子把它剪下来。如果您仍然有问题,请随时发布一份工作簿,其中包含这行数据以及问题代码段。谢谢,我将在尝试后与您联系。嗨,很抱歉,它不起作用。它应该粘贴“10303389607BFTAVAVDJ020170206Z009QWAR1”,但它粘贴了“1.01E+41”,我知道我的代码只用于没有文本的数字。然而,你现在的状况没有意义。检查单元格的引用。你可以用一根柱子把它剪下来。如果您仍然有问题,请随意发布一个工作簿,其中包含这行数据以及有问题的代码段。