【问题标题】:Excel VBA pasting fixed value to a rangeExcel VBA将固定值粘贴到范围
【发布时间】:2018-09-07 20:17:46
【问题描述】:

我正在尝试将一个工作簿中的工作表“Sheet10”中的粘贴数据复制到 DataToPaste.csv Sheet1。 我成功复制了其余数据,但是,在 K1 列中,我需要将范围 K1 中的固定值粘贴到其他列中的数据行数。 我在变量 PR 中获得 DataToPaste.csv 中 num 行的值,但我仍然不知道如何得出正确的 MyPasteRange,比如“K1:K4”左右。请指教!

       Sub MyMacro()

        Dim LR As Long, PR As Long, X As Long, C As String
        ThisWorkbook.Activate

        With Sheets("Sheet10")
            LR = .Range("A" & .Rows.Count).End(xlUp).Row
        MyCopyRange = Array("A5:A" & LR, "B5:B" & LR, "C5:C" & LR, "D5:D" & LR, "E5:E" & LR, "F5:F" & LR, "G5:G" & LR, "H5:H" & LR, "I5:I" & LR, "J5:J" & LR, "K5:K" & LR, "M5:M" & LR) 'Put ranges in an array
        MyPasteRange = Array("A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1", "K1", "L1") '"K1" - Fixed value WILL GO HERE


             'open target csv file
             Set myData = Workbooks.Open(strPath & "DataToPaste.csv")
             Worksheets(1).Select
             Sheets("Sheet1").UsedRange.Clear

            If LR > 1 Then
                j = 0
                For X = LBound(MyCopyRange) To UBound(MyCopyRange) 'Loop the array copying and pasting based on element in the array
               .Range(MyCopyRange(j)).Copy

               If j = 10 Then
                  Dim col As String
                  col = ConvertToLetter(j + 1)
                  PR = Sheets("LOB2RG").Range("A" & .Rows.Count).End(xlUp).Row ' num rows in LOB2RG
                  Dim r As Range
                  Set r = Range(col & "1:" & col & PR)     
                  r.Value  = "ABC"
             Else
                  Sheets("Sheet1").Range(MyPasteRange(j)).PasteSpecial xlPasteValuesAndNumberFormats 'xlPasteValues
             End If

                   j = j + 1
                Next

            Else
                Range("A1") = "No Data Found"
            End If
        End With
    End Sub
Function ConvertToLetter(iCol As Integer) As String
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)

   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha + 64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
   End If
End Function

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    这是一个示例,说明如何向 IE K1 到 K 范围内的所有单元格添加值,在此示例中为 K14。

    Dim i As Integer
    Dim r As Range
    i = 10
    Set r = Range("K1:K14")
    'using PR
    'Set r = Range("K1:K" & PR)
    'using a dynamic range
    'Set r = Range(Cells(1, j), Cells(PR, j))
    r.Value = i
    

    【讨论】:

    • @Soceri:在我的代码中,我使用的是索引而不是 Col "K"。我有 j = 9。请指导如何将 Set r = Range("K1:K" & PR) 转换为使用变量 j
    • Dim r As Range Set r = Range(j & "1:" & j & PR) 当我使用动态值时,我得到运行时错误 '1004': Application-defined or object-定义错误
    • 在线找到了 ConvertToLetter 函数来将 int 转换为 number 的解决方案。将帖子修改为工作代码
    • @SilverFish 你也可以使用它来代替转换为字母的公式Set r = Range(Cells(1, j), Cells(14, j))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多