小编A.S*_*S.H的帖子

变量迭代自身 - 不同类型的不同行为

请查看帖子末尾的最新更新.

特别是,请参阅更新4:变体比较诅咒


我已经看到配偶撞到墙上以了解变体是如何工作的,但从来没有想到我会有自己的糟糕时刻.

我已成功使用以下VBA构造:

For i = 1 to i

当这工作完全i是一个整数或者任何数值类型,从1迭代到原始值i.我这样做的地方i是一个ByVal参数 - 你可能会说懒惰 - 让我自己声明一个新的变量.

然后当这个结构"停止"按预期工作时,我遇到了一个错误.经过一些艰难的调试后,我发现当它没有i被声明为显式数字类型时,它的工作方式不同,但是a Variant.问题有两个:

1- ForFor 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)

vb6 vba for-loop variant language-lawyer

32
推荐指数
1
解决办法
957
查看次数

从VBA中的完整文件名中提取路径

我是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 vba excel-vba

6
推荐指数
1
解决办法
6453
查看次数

从文本导入最多行

从文本导入Excel时,我看到了许多克服Excel限制的技巧.我的问题不同,我想自己设置(小)限制,因为我想要的是在一些巨大的文件中预览数据.因此,我需要让Excel将数据导入到一些行(比如100行,或者最终设置任何其他限制,例如从输入文件中读取的总字节数,或总细胞数,任何东西).

我知道一种创建查询连接的方法,可以删除一些,但我想要的是在保留所有列时截断的方法.

此外,VBA不是一个选择.我用不同的文件和格式多次重复操作,我只需要一个方便的技巧,使用"从文本导入"快速预览Excel.

有小费吗?谢谢你的提前.

excel

5
推荐指数
1
解决办法
63
查看次数

选择从两端按 Min 和 Max 排序

我想知道为什么这段代码没有输出正确的数字序列(升序)。它取自此材料 -升级选择排序。例如,当我插入这样的数组值时 - [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)

c++ selection-sort

5
推荐指数
1
解决办法
3388
查看次数

需要帮助了解不合格的范围

有人可以帮助我理解为什么这有效:

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)

我尝试了很多将"细胞"放入"范围"的形式.

谢谢!

excel vba excel-vba

1
推荐指数
1
解决办法
84
查看次数

标签 统计

excel ×3

vba ×3

excel-vba ×2

c++ ×1

for-loop ×1

language-lawyer ×1

selection-sort ×1

variant ×1

vb6 ×1