2017-08-02 80 views
1

我有VBA的该位VBA在Excel工作正常的Windows 2007机器,但是不能在Windows 10

Sub populateChartData() 
Dim i As Integer 
Dim j As Integer 
Dim finalRowSheet2 As Integer 
Dim k As Integer 
Dim n As Integer 
Dim Sheet2 As Worksheet 
Dim price As Double 
Dim cnt As Integer 

With Worksheets("Data") 
Set Sheet2 = Worksheets("Sheet2") 
finalRowSheet2 = Sheet2.UsedRange.Rows.Count 
For i = 2 To 5 
    For j = 2 To 5 
     price = 0 
     cnt = 0 
     For k = 2 To finalRowSheet2 
      Sheet2.Cells(i, 5) = "'" & Sheet2.Cells(i, 5) 
      If .Cells(i, 1) = CInt(Right(Sheet2.Cells(k, 5), 4)) And _ 
       .Cells(1, j) = Sheet2.Cells(k, 4) Then 
        price = price + Sheet2.Cells(k, 3) 'Col 7 if weighting is used 
        cnt = cnt + 1 
      End If 
     Next k 
     If cnt = 0 Then 
      .Cells(i, j) = 0 
     Else 
      .Cells(i, j) = price/cnt 
     End If 
    Next j 

Next i 
End With 
End Sub 

下面是数据的样本

address1 3.19 mi $1,250 studio 5/1/2017 
address2 3.38 mi $950 studio 7/1/2017 
address3 3.48 mi $725 studio 3/1/2017 
address4 3.51 mi $850 studio 7/1/2017 

它作为意在Windows 2007机器。但是,在Windows 10的机器上使用时,它产生在这一行

If .Cells(i, 1) = CInt(Right(Sheet2.Cells(k, 5), 4)) And _ 
      .Cells(1, j) = Sheet2.Cells(k, 4) Then 

我曾尝试进入Control Panel >> Clock, Language and Region >> Region and Language的语言设置为英文Type Mismatch错误,但它已经被设置为英语。我读过这可能是问题所在。我也尝试过改变变量的类型,但到目前为止,错误仍然在Windows 10机器上抛出。我希望这段代码能够在没有这个错误的情况下在Windows操作系统上工作。

+0

检查'thausands separator'和'两个版本的十进制separator'。它位于控制面板的区域选项中。 – Vityata

+0

我会看看并回复你。 –

回答

0

运行这段代码在两个版本:

Public Sub TestMe() 
    Debug.Print "Decimal -> "; Application.DecimalSeparator 
    Debug.Print "Thausand -> "; Application.ThousandsSeparator 
End Sub 

如果结果是不同的,你知道该怎么做。你可以阅读更多关于这一招在这里:

https://msdn.microsoft.com/en-us/library/office/aa215774(v=office.11).aspx

+1

今天晚些时候我会看看。这实际上是在客户的计算机上,并且已经向他发送了一封电子邮件。我一定会让你知道任何一种方式。 –

+0

转到控制面板路线,您提到的设置看起来完全相同。无论如何,运行此代码可能会给出不同的答案? –

+0

对不起。每个人都得到相同的结果。 –

相关问题