我目前正在尝试做两件事。
1)在两列中交换值。这些值最初列为经度,然后是纬度。我希望首先列出“谷歌纵横”,并在代码的第一部分中做到这一点。
2)问题区域。经度以正值发布,但必须为负,因为负值将提供正确的位置。我在
上找到了答案Convert column positive values to negative values VBA
使范围内的所有值均为负,并在范围内包括空白单元格值。我尝试更改代码以满足我的需要,但遇到运行时错误'1004'-对象'_Global'的方法'Range'失败。
如果有人可以帮助我,将不胜感激!
Public Sub CorrectLongitude()
Dim tempRange As Variant
Dim Longitude As Range
Dim Latitude As Range
'1) Swap Longitude and Latitude
Worksheets("Raw_Data").Activate
Set Longitude = Worksheets("Raw_Data").UsedRange.Columns("AR")
Set Latitude = Worksheets("Raw_Data").UsedRange.Columns("AS")
tempRange = Longitude.Cells
Longitude.Cells.Value = Latitude.Cells.Value
Latitude.Cells.Value = tempRange
'2) Make Longitude values negative
'Variable "Latitude is used as Latitude now contains the longitude values from above
For Each Latitude In Range(Range("AS"), Range("AS" & Rows.Count).End(xlUp))
If Not IsEmpty(Latitude.Value) Then If IsNumeric(Latitude.Value) Then Latitude.Value = -Abs(Latitude.Value)
Next
End Sub
答案 0 :(得分:1)
您实际上是在调用范围Range(Range("AS"),Range("AS1000"))
。您缺少第一行引用。
For Each Latitude In Range(Range("AS1"), Range("AS" & Rows.Count).End(xlUp))
编辑:一个个人建议,不要使用For each Latitude
,因为您将Latitude
定义为其他地方的范围,这可能会使VBA /您自己感到困惑。我通常会做Dim cel as Range // For each cel in ...
。如果您尝试在Latitude.Cells.Value
循环之后使用For
,则结果将与之前调用时大不相同。
假设使用For each cel in Latitude
中的UsedRange
包含了您需要的所有已使用行,您也许可以进行Set Latitude = ...
。