请查看帖子末尾的最新更新.
特别是,请参阅更新4:变体比较诅咒
我已经看到配偶撞到墙上以了解变体是如何工作的,但从来没有想到我会有自己的糟糕时刻.
我已成功使用以下VBA构造:
For i = 1 to i
当这工作完全i是一个整数或者任何数值类型,从1迭代到原始值的i.我这样做的地方i是一个ByVal参数 - 你可能会说懒惰 - 让我自己声明一个新的变量.
然后当这个结构"停止"按预期工作时,我遇到了一个错误.经过一些艰难的调试后,我发现当它没有i被声明为显式数字类型时,它的工作方式不同,但是a Variant.问题有两个:
1- For和For Each循环的确切语义是什么?我的意思是编译器执行的操作顺序是什么,顺序是什么?例如,限制的评估是否在计数器的初始化之前?在循环开始之前,这个限制是否被复制并"修复"了?等等.同样的问题适用于For Each.
2-如何解释变体和显式数字类型的不同结果?有人说变体是一个(不可变的)引用类型,这个定义可以解释观察到的行为吗?
我已经为涉及和语句的不同(独立)场景准备了MCVE,并结合了整数,变体和对象.令人惊讶的结果促使明确定义语义,或者至少检查那些结果是否符合定义的语义.ForFor Each
欢迎所有见解,包括解释一些令人惊讶的结果或其矛盾的部分见解.
谢谢.
Sub testForLoops()
Dim i As Integer, v As Variant, vv As Variant, obj As Object, rng As Range
Debug.Print vbCrLf & "Case1 i --> i ",
i …Run Code Online (Sandbox Code Playgroud) 我是VBA的新手,下面是我的代码无法正常工作,你可以帮忙吗?
Dim nPath1() As String
nPath1() = Split(nPath, "\")
'Declare path as integer
Dim path As Integer
'Getting array length
path = UBound(nPath1())
Dim lastname As String
'For Loop
For i = 0 To path-1
lastname += nPath1(i)+"\"
Next i
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用; 我的路径字符串是Root\zTrash - 不再需要\ NOC\NOC和我想要的是Root\zTrash - 不再需要\ NOC.
从文本导入Excel时,我看到了许多克服Excel限制的技巧.我的问题不同,我想自己设置(小)限制,因为我想要的是在一些巨大的文件中预览数据.因此,我需要让Excel将数据导入到一些行(比如100行,或者最终设置任何其他限制,例如从输入文件中读取的总字节数,或总细胞数,任何东西).
我知道一种创建查询连接的方法,可以删除一些列,但我想要的是在保留所有列时截断的方法.
此外,VBA不是一个选择.我用不同的文件和格式多次重复操作,我只需要一个方便的技巧,使用"从文本导入"快速预览Excel.
有小费吗?谢谢你的提前.
我想知道为什么这段代码没有输出正确的数字序列(升序)。它取自此材料 -升级选择排序。例如,当我插入这样的数组值时 - [8,5,6,1,4,7,3,0,2,9] 它返回 - [0,1,3,4,5,7,8, 6,2,9]。
#include<iostream>
using namespace std;
void Swap(int Arr[100],int Temp_min,int Temp_max)
{
int temp;
temp = Arr[Temp_min];
Arr[Temp_min] = Arr[Temp_max];
Arr[Temp_max] =temp;
}
void OptimizedSelectSort(int Arr[],int n)
{
int i,j,min,max;
for(i=0;i<n/2;i++)
{
min = i;
max = i;
for(j=i+1;j<n-i;j++)
{
if (Arr[j]> Arr[max])
{
max = j;
}
else if (Arr[j]< Arr[min])
{
min = j;
}
}
if (i == max && n-1-i == min)
{
Swap(Arr,min,max);
}
else
{
if …Run Code Online (Sandbox Code Playgroud) 有人可以帮助我理解为什么这有效:
Sub CommandButton1_Click()
Sheets("Inventory Data").Range("A1:G1").Copy
Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,这不是吗?
Sub CommandButton1_Click()
Sheets("Inventory Data").Range(Cells(1, 1), Cells(1, 7)).Copy
Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues
End Sub
Run Code Online (Sandbox Code Playgroud)
我真的希望列号最终成为一个变量.像这样:
Sub CommandButton1_Click()
Sheets("Inventory Data").Range(Cells(1, 1), Cells(1, i)).Copy
Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues
End Sub
Run Code Online (Sandbox Code Playgroud)
我尝试了很多将"细胞"放入"范围"的形式.
谢谢!