Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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_Excel Formula - Fatal编程技术网

Vba 如何将公式粘贴到具有特定文本的单元格中,而不是列中?

Vba 如何将公式粘贴到具有特定文本的单元格中,而不是列中?,vba,excel,excel-formula,Vba,Excel,Excel Formula,我几乎有一个已经在工作的宏,但将来可能会出现问题,因为我的宏找到了我给它的列,然后开始在那里输入公式。现在,我的数据将来可能会更改,在该列中,我可能会有一些新内容,因此宏显然会将公式运行到错误的列。手动更改它是可能的,但是非常繁忙而且需要大量的工作。是否有任何可能的方法可以选择包含特定文本的单元格而不是列?因为文本永远不会改变,这将使我更容易处理。因为这样做,公式将始终张贴在正确的列中 编辑!我在帖子中添加了完整的代码,这样你可以更清楚地看到它,更清楚地理解我的意思 Sub HW_Copy_Ra

我几乎有一个已经在工作的宏,但将来可能会出现问题,因为我的宏找到了我给它的列,然后开始在那里输入公式。现在,我的数据将来可能会更改,在该列中,我可能会有一些新内容,因此宏显然会将公式运行到错误的列。手动更改它是可能的,但是非常繁忙而且需要大量的工作。是否有任何可能的方法可以选择包含特定文本的单元格而不是列?因为文本永远不会改变,这将使我更容易处理。因为这样做,公式将始终张贴在正确的列中

编辑!我在帖子中添加了完整的代码,这样你可以更清楚地看到它,更清楚地理解我的意思

Sub HW_Copy_RawData_Formulas()
Dim intChoice As Integer
Dim strPath As String
Dim I As Integer
Dim filePath As String
Dim SourceWb As Workbook
Dim TargetWb As Workbook
Dim Lastrow As Long
Dim Nrow As Long

Set TargetWb = ActiveWorkbook
' Delete Rows
On Error Resume Next
    TargetWb.Worksheets("Raw Data").Activate
    Range("A2:AL2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Range("A2:AL2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
'Copy Formulas
Range("AF2").Formula = "=IF([@ServDt]<DATE(2013,1,1), DATE(YEAR([@ServDt]),12,31),EOMONTH([@ServDt],0))"
Range("AG2").Formula = "=IF([@Amount]>1,[@Quantity],0)"
Range("AH2").Formula = "=IF([@Amount]<>0,[@Amount]-[@Adj]-[@[Adjustment ]],0)"
Range("AI2").Formula = "=IF(AND([@Department]=""HH"",[@Pay]=0),[@Amount]/2,0)"
Range("AJ2").Formula = "=IF([@Amount]<>0,[@Bal]-[@[Adjustment ]],[@Bal]+[@Adj])"
Range("AK2").Formula = "=VLOOKUP([Department],Service[#All],2,FALSE)"
Range("AL2").Formula = "=VLOOKUP([@Entity],Site,3,FALSE)"

MSG1 = MsgBox("Add Raw Data", vbYesNo)
If MSG1 = vbYes Then

'only allow the user to select one file
    Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
'make the file dialog visible to the user
    intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
    If intChoice <> 0 Then
    'get the file path selected by the user
        strPath = Application.FileDialog( _
            msoFileDialogOpen).SelectedItems(1)
     Else: GoTo endmsg
    End If

'Setting source of data
Set SourceWb = Workbooks.Open(strPath)

Lastrow = SourceWb.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row

SourceWb.Worksheets(1).Range("A2:BJ" & Lastrow).SpecialCells(xlCellTypeVisible).Select
Selection.Copy Destination:=TargetWb.Sheets("Raw Data").Range("A2")
' Close the source workbook without saving changes.
SourceWb.Close savechanges:=False

Else
endmsg:
  MsgBox "Complete"
End If

Range("AF2:AL2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("AF2").PasteSpecial xlPasteValues

End Sub
Sub-HW\u Copy\u RawData\u Formulas()
选择整数
将strPath设置为字符串
作为整数的Dim I
将文件路径设置为字符串
将SourceWb设置为工作簿
将TargetWb设置为工作簿
最后一排一样长
暗淡无光
设置targetWeb=ActiveWorkbook
'删除行
出错时继续下一步
目标工作表(“原始数据”)。激活
范围(“A2:AL2”)。选择
范围(选择,选择。结束(xlDown))。选择
选择。删除移位:=xlUp
范围(“A2:AL2”)。选择
范围(选择,选择。结束(xlDown))。选择
选择。删除移位:=xlUp
"复制公式",
范围(“AF2”)。公式=“=IF([@ServDt]1,[@Quantity],0)”
范围(“AH2”)。公式=“=如果([@Amount]0,[@Amount]-[@Adj]-[@Adj]-[@[Adjustment]],0)”
范围(“AI2”)。公式=“=如果(和([@Department]=“HH”,“[@Pay]=0),[@Amount]/2,0)”
范围(“AJ2”)。公式=“=如果([@Amount]0,[@Bal]-[@Adj]],[@Bal]+[@Adj])”
范围(“AK2”)。公式=“=VLOOKUP([部门],服务[#全部],2,错误)”
范围(“AL2”).Formula=“=VLOOKUP([@Entity],Site,3,FALSE)”
MSG1=MsgBox(“添加原始数据”,vbYesNo)
如果MSG1=vbYes,则
'仅允许用户选择一个文件
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect=False
'使文件对话框对用户可见
intChoice=Application.FileDialog(msoFileDialogOpen.Show)
'确定用户所做的选择
如果选择0,那么
'获取用户选择的文件路径
strPath=Application.FileDialog(_
msoFileDialogOpen)。选择编辑项(1)
其他:转到endmsg
如果结束
'设置数据源
设置SourceWb=Workbooks.Open(strPath)
Lastrow=SourceWb.Worksheets(1).单元格(Rows.Count,1).结束(xlUp).行
SourceWb.Worksheets(1).范围(“A2:BJ”和Lastrow).特殊单元格(xlCellTypeVisible).选择
选择.复制目的地:=目标工作表(“原始数据”).范围(“A2”)
'关闭源工作簿而不保存更改。
SourceWb.Close savechanges:=False
其他的
endmsg:
MsgBox“完成”
如果结束
范围(“AF2:AL2”)。选择
范围(选择,选择。结束(xlDown))。选择
选择,复制
范围(“AF2”).Paste特殊XLPaste值
端接头

以下代码片段可能对您有用。它获取给定特定值的单元格范围。它还可用于使用
.Rows()
搜索特定行

Dim *YOURCELL* As Range

Set *YOURCELL*= .Columns(1).Find(What:= *WHATYOUWANTTOFIND*, LookAt:=xlWhole, MatchCase:=False, searchformat:=False)

如果您不知道上次使用的单元格位于何处,则考虑阅读其他帖子。 编辑:

只要当前选定的单元格不为空,while循环就会运行。在这个循环中,它选择右边的下一个单元格并递增计数。循环完成后,当前选定的单元格是第二行中的第一个空单元格。Count通过在循环旁边递增找到了它的列号,因此可以根据需要使用它。我使用了单元格而不是范围,因为它可以使用列号

Range("A2").Select    

Dim count As Integer
count = 1

'skip all used cells in the row
Do While Not (ActiveCell.value = None)
    ActiveCell.Offset(0, 1).Range("A1").Select
    count = count + 1
Loop

Cells(count, 2).Formula = your_formula
Cells(count + 1, 2).Formula = your_formula ' next cell to the right
Cells(count + 2, 2).Formula = your_formula ' next cell to the right

我不认为这正是我想要的。我在那里添加了我的整个宏,所以也许你能更好地理解。比如说范围(“AF2”),我想知道是否可以说像SelectCell(“服务日期”)是的,我知道我完全制作了SelectCell,但它只是一个例子。你能解释一下编辑的用途吗?像一个小的解释将是很好的,这样我可以通过并尝试它。解释已添加。我希望有帮助!