PDA

View Full Version : Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)



Pages : [1] 2 3

DocAElstein
08-17-2014, 01:05 AM
fsfsf


Copy for testing purposes July 2023

Thread became 2909, https://www.excelfox.com/forum/showthread.php/2909-Copy-July-2023-testing-Concatenating-your-Balls and then I merged this ( https://www.excelfox.com/forum/showthread.php/2834-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)
https://www.excelfox.com/forum/showthread.php/2834-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-) ) to it
and this first post post is #post21888 https://www.excelfox.com/forum/showthread.php/2909-Copy-July-2023-testing-Concatenating-your-Balls?p=21888&viewfull=1#post21888
https://www.excelfox.com/forum/showthread.php/2909-Copy-July-2023-testing-Concatenating-your-Balls#post21888

Finally i changed the title from
Copy July 2023 testing Concatenating your Balls
to ( sort of back to )
Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)



https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)
https://www.youtube.com/watch?v=UywjKEMjSp0&lc=UgxIySxHPqM1RxtVqoR4AaABAg.9edGvmwOLq99eekDyfS0 CD (https://www.youtube.com/watch?v=UywjKEMjSp0&lc=UgxIySxHPqM1RxtVqoR4AaABAg.9edGvmwOLq99eekDyfS0 CD)
https://www.youtube.com/watch?v=UywjKEMjSp0&lc=UgxIySxHPqM1RxtVqoR4AaABAg.9edGvmwOLq99eevG7txd 2c (https://www.youtube.com/watch?v=UywjKEMjSp0&lc=UgxIySxHPqM1RxtVqoR4AaABAg.9edGvmwOLq99eevG7txd 2c)
https://www.youtube.com/watch?v=SIDLFRkUEIo&lc=UgzTF5vvB67Zbfs9qvx4AaABAg (https://www.youtube.com/watch?v=SIDLFRkUEIo&lc=UgzTF5vvB67Zbfs9qvx4AaABAg)
https://www.youtube.com/watch?v=9P6r7DLS77Q&lc=UgzytUUVRyw9U55-6M54AaABAg (https://www.youtube.com/watch?v=9P6r7DLS77Q&lc=UgzytUUVRyw9U55-6M54AaABAg)
https://www.youtube.com/watch?v=9P6r7DLS77Q&lc=UgzCoa6tOVIBxRDDDbN4AaABAg (https://www.youtube.com/watch?v=9P6r7DLS77Q&lc=UgzCoa6tOVIBxRDDDbN4AaABAg)
https://www.youtube.com/watch?v=9P6r7DLS77Q&lc=UgyriWOelbVnw4FHWT54AaABAg.9dPo-OdLmZ09dc21kigjmr (https://www.youtube.com/watch?v=9P6r7DLS77Q&lc=UgyriWOelbVnw4FHWT54AaABAg.9dPo-OdLmZ09dc21kigjmr)
https://www.youtube.com/watch?v=363wd2EtQZ0&lc=UgzDQfo5rJqyVwvv2r54AaABAg (https://www.youtube.com/watch?v=363wd2EtQZ0&lc=UgzDQfo5rJqyVwvv2r54AaABAg)
https://www.youtube.com/watch?v=363wd2EtQZ0&lc=UgzHTSka7YppBdmUooV4AaABAg.9cXui6zzkz09cZttH_-2Gf (https://www.youtube.com/watch?v=363wd2EtQZ0&lc=UgzHTSka7YppBdmUooV4AaABAg.9cXui6zzkz09cZttH_-2Gf)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxhXnQ-mWYhrHWuM354AaABAg.9bepnegjnRu9iMmBDtf4m1 (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxhXnQ-mWYhrHWuM354AaABAg.9bepnegjnRu9iMmBDtf4m1)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxFIZ858qf7w_uA9bd4AaABAg.9dKpEpUk3YT9dVEGnka6 yj (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxFIZ858qf7w_uA9bd4AaABAg.9dKpEpUk3YT9dVEGnka6 yj)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugz8oC8iGd6-SPhpaQZ4AaABAg.9bhRt-kPXri9brzh_99JF9 (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugz8oC8iGd6-SPhpaQZ4AaABAg.9bhRt-kPXri9brzh_99JF9)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugz8oC8iGd6-SPhpaQZ4AaABAg.9bhRt-kPXri9bsrQIgXb3L (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugz8oC8iGd6-SPhpaQZ4AaABAg.9bhRt-kPXri9bsrQIgXb3L)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzFkoI0n_BxwnwVMcZ4AaABAg (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzFkoI0n_BxwnwVMcZ4AaABAg)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxwJDkFskrMW8EpcXt4AaABAg.9bmKMz5-Z1g9bmx0REIz41 (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxwJDkFskrMW8EpcXt4AaABAg.9bmKMz5-Z1g9bmx0REIz41)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxhXnQ-mWYhrHWuM354AaABAg.9bepnegjnRu9bmyko2YUvQ (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxhXnQ-mWYhrHWuM354AaABAg.9bepnegjnRu9bmyko2YUvQ)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxwJDkFskrMW8EpcXt4AaABAg.9bmKMz5-Z1g9bmzpPqfLRD (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxwJDkFskrMW8EpcXt4AaABAg.9bmKMz5-Z1g9bmzpPqfLRD)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzZwbV_Y_7UFzHwNBh4AaABAg.9dKb0Vc7MOB9dVK8si3o nt (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzZwbV_Y_7UFzHwNBh4AaABAg.9dKb0Vc7MOB9dVK8si3o nt)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugx6Ec_r4kb9EYOVgIt4AaABAg.9dOW613fb8V9dVIJECZI dC (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugx6Ec_r4kb9EYOVgIt4AaABAg.9dOW613fb8V9dVIJECZI dC)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgwBho9tBLQ4nPVdYqd4AaABAg.9fWvoBWY3Da9g9cLjhPi az (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgwBho9tBLQ4nPVdYqd4AaABAg.9fWvoBWY3Da9g9cLjhPi az)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzZy1NAMBx5Uv4U2cJ4AaABAg.9f0XX-_JaGp9g9bYLMZiIy (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzZy1NAMBx5Uv4U2cJ4AaABAg.9f0XX-_JaGp9g9bYLMZiIy)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyL-xp8IiiahmQ12kJ4AaABAg.9f7xHCpAEx29g9asFhVFfT (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyL-xp8IiiahmQ12kJ4AaABAg.9f7xHCpAEx29g9asFhVFfT)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxRxyFNNp3WHTzuiJJ4AaABAg.9fFR6ECmXk69g9afNBcS 4Z (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxRxyFNNp3WHTzuiJJ4AaABAg.9fFR6ECmXk69g9afNBcS 4Z)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgwsdMh0FGDfvA249_B4AaABAg.9fLR6FHCIVI9g9aLlUyz og (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgwsdMh0FGDfvA249_B4AaABAg.9fLR6FHCIVI9g9aLlUyz og)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgwBho9tBLQ4nPVdYqd4AaABAg.9fWvoBWY3Da9g9_4422N zK (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgwBho9tBLQ4nPVdYqd4AaABAg.9fWvoBWY3Da9g9_4422N zK)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugwyy8JXr56HJ8m_od94AaABAg.9gSFgqqJQNV9gTXco41b 5l (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=Ugwyy8JXr56HJ8m_od94AaABAg.9gSFgqqJQNV9gTXco41b 5l)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTYl6Rld pA (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTYl6Rld pA)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTfhAWU9 ju (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTfhAWU9 ju)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTfuYQGm Ua (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTfuYQGm Ua)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTg3AmMP Uc (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTg3AmMP Uc)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTgEqh5w do (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgyS8stMz5B9NrpPrbR4AaABAg.9gOjiS0rs8l9gTgEqh5w do)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxmUK0S_aZVZWz8-gt4AaABAg.9gLc3DfWfHl9gTZ3y6fL1H (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgxmUK0S_aZVZWz8-gt4AaABAg.9gLc3DfWfHl9gTZ3y6fL1H)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzZloYeY2wQr7-xTOh4AaABAg.9gB2bbbs9mB9gTZUkNYI8e (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzZloYeY2wQr7-xTOh4AaABAg.9gB2bbbs9mB9gTZUkNYI8e)
https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzlM96nGEhW9J1Gpgd4AaABAg.9fmOFVcXZh49gT_8CYeQ gz (https://www.youtube.com/watch?v=tPRv-ATUBe4&lc=UgzlM96nGEhW9J1Gpgd4AaABAg.9fmOFVcXZh49gT_8CYeQ gz)
https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)

Excel Fox
08-21-2014, 12:01 AM
DocAElstein (http://www.excelfox.com/forum/users/9041/), welcome to the ExcelFox community.

The text to column feature in Excel is used to split text based on a delimiter, like spaces, commas (,) etc. I am almost certain that it doesn't work the other way round.

Now, coming to your specific query about Jill referring to the Text To Column feature to convert the comma separated ball numbers for each day, in to different rows, I assure you that was just one part of the conversion. In the interest of time, and to keep that separate from the overall objective of the podcast, Jill certainly omitted to showcase the entire method he adopted to convert the data to what he was showing in that podcast video.

What he would have done is, after pasting the comma separated data from MegaMillions site, split the data in to separate columns using Text To Column, and then used some formulae or VBA to make all data in to columns. That's my reading, and a lot of other Excel experts would agree. But, with due credit to Jill, I wish and hope that I am wrong :)

Excel Fox
08-21-2014, 12:03 AM
For those interested to hear Jill's podcast which is being referred to in this thread, here's the video.


https://www.youtube.com/watch?v=PF8QpDhBQXQ

DocAElstein
08-21-2014, 12:51 AM
DocAElstein (http://www.excelfox.com/forum/users/9041/), welcome to the ExcelFox community.

The text to column feature in Excel.................

Hi,
Thanks very much for replying. Happy to be here in the Forum!.
. I was mainly interested in a reply from Rick to my specific question on a line in his code as I had asked in #15 from the MrExcel thread ( Multiple Columns into Single Column using Data, Text to Column (http://www.mrexcel.com/forum/excel-questions/797921-multiple-columns-into-single-column-using-data-text-column.html?#post3902054) ), as I had not managed to catch him there.

. But nevertheless Thanks for the interesting infomation. I expect your infomation would have been of particular interest to the initiator of that Thread. (I could possibly referrence him here, but I am not too sure about the Forum Rules about that sort of thing? Maybe you can advise me on that one?)


. I had simply replied in that MrExcel Thread in parralel with Rick to that thread and had asked him for some clarification of one line in his code. Unfortunately it is difficult to get in touch with him.
. Thanks again.
. Hope I can be active as well in the future in this forum!

Alan Elston
Bavaria,
Germany






https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)
https://www.youtube.com/watch?v=v_1iqtOnUMg&lc=UgyhQ73u0C3V4bEPhYB4AaABAg (https://www.youtube.com/watch?v=v_1iqtOnUMg&lc=UgyhQ73u0C3V4bEPhYB4AaABAg)
https://www.youtube.com/watch?v=v_1iqtOnUMg&lc=UgzIElpI5OFExnUyrk14AaABAg.9fsvd9zwZii9gMUka-NbIZ (https://www.youtube.com/watch?v=v_1iqtOnUMg&lc=UgzIElpI5OFExnUyrk14AaABAg.9fsvd9zwZii9gMUka-NbIZ)
https://www.youtube.com/watch?v=jdPeMPT98QU (https://www.youtube.com/watch?v=jdPeMPT98QU)
https://www.youtube.com/watch?v=QdwDnUz96W0&lc=Ugx3syV3Bw6bxddVyBx4AaABAg (https://www.youtube.com/watch?v=QdwDnUz96W0&lc=Ugx3syV3Bw6bxddVyBx4AaABAg)
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=UgxsozCmRd3RAmIPO5B4AaABAg.9fxrOrrvTln9g9wr8mv2 CS (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=UgxsozCmRd3RAmIPO5B4AaABAg.9fxrOrrvTln9g9wr8mv2 CS)
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugw6zxOMtNCfmdllKQl4AaABAg (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugw6zxOMtNCfmdllKQl4AaABAg)
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=UgyT1lo2YMUyZ50bLeR4AaABAg.9fz3_oaiUeK9g96yGbAX 4t (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=UgyT1lo2YMUyZ50bLeR4AaABAg.9fz3_oaiUeK9g96yGbAX 4t)
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugx5d-LrmoMM_hsJK2N4AaABAg.9fyL20jCtOI9g7pczEpcTz (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugx5d-LrmoMM_hsJK2N4AaABAg.9fyL20jCtOI9g7pczEpcTz)
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=UgyT1lo2YMUyZ50bLeR4AaABAg.9fz3_oaiUeK9g7lhoX-ar5 (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=UgyT1lo2YMUyZ50bLeR4AaABAg.9fz3_oaiUeK9g7lhoX-ar5)
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugx5d-LrmoMM_hsJK2N4AaABAg.9fyL20jCtOI9gD0AA-sfpl (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugx5d-LrmoMM_hsJK2N4AaABAg.9fyL20jCtOI9gD0AA-sfpl )
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugx5d-LrmoMM_hsJK2N4AaABAg.9fyL20jCtOI9gECpsAVGbh (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugx5d-LrmoMM_hsJK2N4AaABAg.9fyL20jCtOI9gECpsAVGbh)
https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugw6zxOMtNCfmdllKQl4AaABAg.9g9wJCunNRa9gJGhDZ4R I2 (https://www.youtube.com/watch?v=U76ZRIzBhOA&lc=Ugw6zxOMtNCfmdllKQl4AaABAg.9g9wJCunNRa9gJGhDZ4R I2)
https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)

Excel Fox
08-21-2014, 01:20 AM
OK. The conditional evaluation returns an array of values, whereas a direct non-conditional evaluation would return a single value 'in some cases'. There could be a valid theory behind that, but that is not something I am privy to. It's probably the way EVALUATE function works. So anyway, to understand that difference a bit more clearly, you can test the following to codes. Both are actually trying to do the same time, but since the evaluate function 'in some cases' only returns a single value in the second code, the entire output in A1:A10 becomes the same. Having said that, in this case below, both the codes seem to be working fine in some systems, and not in some other systems. I will get back to you with a suitable example.


Range("A1:A10") = Evaluate("IF(1," & Range("A1:z10").Columns(2).Address & "&"" - ""&" & Range("A1:z10").Columns(3).Address & "&"" - ""&" & Range("A1:z10").Columns(4).Address & ")")


Range("A1:A10") = Evaluate(Range("A1:z10").Columns(2).Address & "&"" - ""&" & Range("A1:z10").Columns(3).Address & "&"" - ""&" & Range("A1:z10").Columns(4).Address)

And by the way, you don't necessarily need to use ROW()

Rick just used that as a means to move the IF function's execution to the TRUE condition. Now, you would know that anything except 0 (zero) means TRUE in the Excel boolean world. And since the minimum value of ROW() is greater than 0 (yes, it's 1 and above), using ROW(), or using 1, has the same effect in the IF condition.

Hope this makes it clear.

EDIT: Will get back with more clarity.

DocAElstein
08-21-2014, 01:42 AM
Thanks very much. I'll try that all out and keep watching this space!


https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)
https://www.youtube.com/watch?v=oVb1RfcSHLM&lc=UgwTq-jZlZLnLQ5VB8Z4AaABAg.9Hroz-OyWog9tYjSMc1qjA (https://www.youtube.com/watch?v=oVb1RfcSHLM&lc=UgwTq-jZlZLnLQ5VB8Z4AaABAg.9Hroz-OyWog9tYjSMc1qjA)
https://www.youtube.com/watch?v=0pbsf6sox34&lc=Ugxp9JFvvejnqA68W1t4AaABAg (https://www.youtube.com/watch?v=0pbsf6sox34&lc=Ugxp9JFvvejnqA68W1t4AaABAg)
https://www.youtube.com/watch?v=kfQC-sQxMcw&lc=UgyCxQWypNIhG2nUn794AaABAg.9q1p6q7ah839tUQl_92m vg (https://www.youtube.com/watch?v=kfQC-sQxMcw&lc=UgyCxQWypNIhG2nUn794AaABAg.9q1p6q7ah839tUQl_92m vg)
https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgyOh-eR43LvlIJLG5p4AaABAg.9isnKJoRfbL9itPC-4uckb (https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgyOh-eR43LvlIJLG5p4AaABAg.9isnKJoRfbL9itPC-4uckb)
https://www.youtube.com/watch?v=vXyMScSbhk4&lc=Ugy1B1aQnHq2WbbucmR4AaABAg.9isY3Ezhx4j9itQLuif2 6T (https://www.youtube.com/watch?v=vXyMScSbhk4&lc=Ugy1B1aQnHq2WbbucmR4AaABAg.9isY3Ezhx4j9itQLuif2 6T)
https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgxxajSt03TX1wxh3IJ4AaABAg.9irSL7x4Moh9itTRqL7d Qh (https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgxxajSt03TX1wxh3IJ4AaABAg.9irSL7x4Moh9itTRqL7d Qh)
https://www.youtube.com/watch?v=vXyMScSbhk4&lc=Ugxa2VYHMWJWXA6QI294AaABAg.9irLgSdeU3r9itU7zdnW Hw (https://www.youtube.com/watch?v=vXyMScSbhk4&lc=Ugxa2VYHMWJWXA6QI294AaABAg.9irLgSdeU3r9itU7zdnW Hw)
https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgwJAAPbp8dhkW2X1Uh4AaABAg.9iraombnLDb9itV80HDp Xc (https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgwJAAPbp8dhkW2X1Uh4AaABAg.9iraombnLDb9itV80HDp Xc)
https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgzIzQ6MQ5kTpuLbIuB4AaABAg.9is0FSoF2Wi9itWKEvGS Sq (https://www.youtube.com/watch?v=vXyMScSbhk4&lc=UgzIzQ6MQ5kTpuLbIuB4AaABAg.9is0FSoF2Wi9itWKEvGS Sq)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgykemWTw-fGoPwu8E14AaABAg.9iECYNx-n4U9iK75iCEaGN (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgykemWTw-fGoPwu8E14AaABAg.9iECYNx-n4U9iK75iCEaGN)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgykemWTw-fGoPwu8E14AaABAg.9iECYNx-n4U9iK7XF33njy (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgykemWTw-fGoPwu8E14AaABAg.9iECYNx-n4U9iK7XF33njy)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugy_1xkcndYdzUapw-J4AaABAg.9iGOq_leF_E9iKCSgpAqA1 (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugy_1xkcndYdzUapw-J4AaABAg.9iGOq_leF_E9iKCSgpAqA1)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugy_1xkcndYdzUapw-J4AaABAg.9iGOq_leF_E9iKCy--3x8E (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugy_1xkcndYdzUapw-J4AaABAg.9iGOq_leF_E9iKCy--3x8E)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwNaJiNATXshvJ0Zz94AaABAg.9iEktVkTAHk9iF9_pdsh r6 (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwNaJiNATXshvJ0Zz94AaABAg.9iEktVkTAHk9iF9_pdsh r6)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgykemWTw-fGoPwu8E14AaABAg.9iECYNx-n4U9iFAZq-JEZ- (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgykemWTw-fGoPwu8E14AaABAg.9iECYNx-n4U9iFAZq-JEZ-)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgxV2r7KQnuAyZVLHH54AaABAg.9iDVgy6wzct9iFBxma9z XI (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgxV2r7KQnuAyZVLHH54AaABAg.9iDVgy6wzct9iFBxma9z XI)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugx12mI-a39T41NaZ8F4AaABAg.9iDQqIP56NV9iFD0AkeeJG (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugx12mI-a39T41NaZ8F4AaABAg.9iDQqIP56NV9iFD0AkeeJG)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwnYuSngiuYaUhEMWN4AaABAg.9iDQN7TORHv9iFGQQ5z_ 3f (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwnYuSngiuYaUhEMWN4AaABAg.9iDQN7TORHv9iFGQQ5z_ 3f)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwJ3yzdk_EE98dndmt4AaABAg.9iDLC2uEPRW9iFGvgk11 nH (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwJ3yzdk_EE98dndmt4AaABAg.9iDLC2uEPRW9iFGvgk11 nH)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgyDWAVqCa4yMot463x4AaABAg.9iH3wvUZj3n9iHnpOxOe Xa (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgyDWAVqCa4yMot463x4AaABAg.9iH3wvUZj3n9iHnpOxOe Xa)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwvLFdMEAba5rLHIz94AaABAg.9iGReNGzP4v9iHoeaCpT G8 (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=UgwvLFdMEAba5rLHIz94AaABAg.9iGReNGzP4v9iHoeaCpT G8)
https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugy_1xkcndYdzUapw-J4AaABAg.9iGOq_leF_E9iHpsWCdJ5I (https://www.youtube.com/watch?v=ITI1HaFeq_g&lc=Ugy_1xkcndYdzUapw-J4AaABAg.9iGOq_leF_E9iHpsWCdJ5I)
https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)

Excel Fox
08-21-2014, 01:48 AM
Here's another sample by Vishesh. There also he is using a similar logic. But when I tested it on my machine, the code works fine even if I remove the IF condition.

Evaluate (VBA) for Concatenation | ExcelExperts.com (http://excelexperts.com/evaluate-vba-concatenation)

Let me investigate that!

Excel Fox
08-21-2014, 02:08 AM
OK, here's another thread that confirms my claim. Phew!

VBA Trick of the Week :: Avoid Loop for Range Calculations – Evaluate | Useful Gyaan (http://usefulgyaan.wordpress.com/2013/06/19/avoid-loop-for-range-calculations-evaluate/)

Specifically, read the below excerpt



Suppose we’ve some text values in range A1:A10 and we want to extract and keep only the first three letters of the values in all cells of this range. We could try to do so using the below code:
Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("A1:B10")
rngData = Evaluate("Left(" & rngData.Address & ",3)") BUT, you’ll find it does not work. It will fill the whole range with first 3 letters of cell A1. The reason is that if the Excel function used in Evaluate does not accept an array, the Evaluate function will not return an array. So in order to make this function return an array we need to modify the code slightly like this:


Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("A1:A10")
rngData = Evaluate("if(Row(1:10),left(" & rngData.Address & ",3))") In this case, ROW(1:10) returns an array of numbers from 1 to 10. Any numeric value other than 0 returned from a logical function is considered as TRUE, So there are 10 vertical TRUE values. For each TRUE, it will return the corresponding cell’s value from A1:A10.



And the reason why it was working in the previous examples was probably because we weren't using any other function within the EVALUATE function. Hopefully, this makes more sense.

Excel Fox
08-21-2014, 02:12 AM
By the way, you can reference this thread to the OP at the other forum, as long as you feel it is relevant, and is not intended to manipulate traffic. Hope that's as straight as it gets.

DocAElstein
08-21-2014, 03:15 AM
Wow, great, Thanks for all that info. - I'll work me way throught it now (or maybe tomorrow night in my daily "VBA Hour" - It is nearly bed-time now here in Bavaria)

Thanks again
Alan

.P.s....
By the way, you can reference this thread to the OP at the other forum, as long as you feel it is relevant, and is not intended to manipulate traffic. Hope that's as straight as it gets....OK....(should be OK - Rick referrences this Forum in all his replies!)

DocAElstein
08-22-2014, 03:37 AM
OK. The conditional evaluation returns an array of values, whereas a direct non-conditional evaluation would return a single value 'in some cases'. There could be a valid theory behind that, but that is not something I am privy to. It's probably the way EVALUATE function works. So anyway, to understand that difference a bit more clearly, you can test the following to codes. Both are actually trying to do the same time, but since the evaluate function 'in some cases' only returns a single value in the second code, the entire output in A1:A10 becomes the same. Having said that, in this case below, both the codes seem to be working fine in some systems, and not in some other systems. I will get back to you with a suitable example.


Range("A1:A10") = Evaluate("IF(1," & Range("A1:z10").Columns(2).Address & "&"" - ""&" & Range("A1:z10").Columns(3).Address & "&"" - ""&" & Range("A1:z10").Columns(4).Address & ")")


Range("A1:A10") = Evaluate(Range("A1:z10").Columns(2).Address & "&"" - ""&" & Range("A1:z10").Columns(3).Address & "&"" - ""&" & Range("A1:z10").Columns(4).Address)

And by the way, you don't neces.......................



Hi „Fox“,
. I am working through the code again from Rick that I did not understand, getting good clued up on the exact syntax in complex Evaluation codes (A Tricky one!!!), and working through all the info you sent. I am almost there and expect to post here soon what I think would be a useful reply to this Thread. I noticed something along the way, which I do not quite understand. I applied it to your codes, (or rather some very similar) and got similar results. So while I am finishing the main reply I thought I might just post that as something to be going on with in the meantime……

. Firstly , just
. a) for clarity in the thread response editor, and
. b) so that it suits the example I am working with in regard to Rick’s code,
. – I have slightly modified the exact ranges to suit this Table (where column H is the output column and the other yellow highlighted area is my input data.


. Correspondingly your codes, modified by me, look like this:


Sub Fox1lmr()
Range("H2:H10") = Evaluate("IF(1," & Range("A2:D10").Columns(2).Address & "&"" - ""&" & Range("A2:D10").Columns(3).Address & "&"" - ""&" & Range("A2:D10").Columns(4).Address & ")")
End Sub
Sub Fox2lmr()
Range("H2:H10") = Evaluate(Range("A2:D10").Columns(2).Address & "&"" - ""&" & Range("A2:D10").Columns(3).Address & "&"" - ""&" & Range("A2:D10").Columns(4).Address)
End Sub

. Either of these codes gives the results shown in the table above.

If I modify your codes to this


Sub Fox1lm()
Range("H2:H10") = Evaluate("IF(1," & Range("A2:D10").Columns(2).Address & "&"" - ""&" & Range("A2:D10").Columns(3).Address & ")")
End Sub
Sub Fox2lm()
Range("H2:H10") = Evaluate(Range("A2:D10").Columns(2).Address & "&"" - ""&" & Range("A2:D10").Columns(3).Address)
End Sub

. then as expected I only get the l and m values. But again both Codes work.

If I modify the codes again to this


Sub Fox1l()
Range("H2:H10") = Evaluate("IF(1," & Range("A2:D10").Columns(2).Address & ")")
End Sub
Sub Fox2l()
Range("H2:H10") = Evaluate(Range("A2:D10").Columns(2).Address)
End Sub

. then I expect to get only the l values . BUT in fact after running both codes they both give me blank cells in column G.

. However this code


Sub Fox1lRow()
Range("H2:H10") = Evaluate("IF(ROW()," & Range("A2:D10").Columns(2).Address & ")")
End Sub

. Does give me the expected results.

. I hope to explain in my final reply that Ricks code does not require the Row() as I had initially thought. With the above results along with some very careful Syntax considerations I hope to be able to prove and explain why that is. (In the second reference you gave me I think they may have slightly “glossed over” a full explanation of this by being careful exactly what ranges they were using as well as changing them to suit as they went along!!!)

Alan

P.s. As I did some test in your Tests just now in your test forum I hit on some space / size limitation which I have not experienced in MrExcel? Can I possibly have my space, or does that come automatically when I become a “Senior” member or whatever the next bit up is??

DocAElstein
08-22-2014, 03:40 AM
Try the Table again

DocAElstein
08-22-2014, 03:46 AM
Ok. I have not quite got the hang of your HTML workings in Replying (It worked in Test Forum??)


Plan B:-

Here is an XL 2007 File
FileSnack | Easy file sharing (http://snk.to/f-cdkabi9h)

The table of interest is in Sheet 3 "KennyRickFox"
The corresponding Macros are in that Sheet Module

DocAElstein
08-23-2014, 03:34 AM
............ Correspondingly your codes, modified by me, look like this
..................................

Today I tried your exact Codes. Got the same results

DocAElstein
08-23-2014, 03:47 AM
Re: EvaluatingConcatenating in VBA (and the Row() stuff)!
. Sorry if I am confusingly / mixing up Themesin this Thread!

. I will try to get some of my thoughtsstraight on this. (I might be repeating wot The “Fox” said above, but this is now how it is coming out ofmy brain now that I am beginning to understand it!). I start with a bit ofbasic Evaluate syntax as that can get a bit confusing if you are not careful!!
. We probably all know that, simplified said,the Application.Evaluate Method in VBA gives a way of using the Normal Excelfunctions in VBA. Again very simplifiedthe Evaluate in VBA sort of does wot the = does in a Normal ExcelWorksheet(Spreadsheet). So, for a randomexample, to get the value of B2 into Cell H2:
. In Excel, in cell H2, one would type
=B2
. In VBA code one would write
Sub TestVBA1()

Range("H2").Value= Range("B2").Value

End Sub

( Note in passing : This code isequivalent, that is to say VBA reads it the same:
Sub TestVBA1()
Range("H2").Value =Range("$B$2").Value
End Sub )


… It is veryimportant to note the exact syntax, as it is easy in more complicated stuff toget confused with the number of “
……You type this Evaluate(“ “), and then in the space you type exactlywhat you would in the Spreadsheet cell but omitting the =
………In theparticular code that was giving me trouble to understand, this basic code wastaken a bit further, that is to say the Address of the cell B2 was got by the VBA code Property .Address , in our case this would look like this
Range(“B2”).Address
This code can bewritten within the Evaluate Function. The syntax for this is “ & to get into acode bit and then & “ to get out ofit!, if that makes sense!!
. So the codewould be

SubTestEvaluateVBA1()
Range("H2")= Evaluate("" & Range("B2").Address & "")
End Sub


( Note in passing : This code isequivalent, that is to say VBA reads it the same:
Sub TestEvaluateVBA1()
Range("H2") = Evaluate(" " &Range("B2").Address & " ")
End Sub
This is because nothing is happening in thiscase or read by VBA between the pair of quotes at the start and the end!, ifthat makes sense!?)

. Staying for now with the Syntax Theme, beforeI go on to my main problem. If I wish to get involved now with another simpleexample that involves three cells, B2 and C2 And D2 the values of which I wishto put in that one cell H2, then in an Excel spreadsheet the formula syntax wemay know would be
=B2 & C2& D2
. We must be very careful now with syntax andtry to think about how Excel and VBA are thinking!. We have now 5 things beingdone after the =
. The evaluate function in VBA does allow youto “evaluate” more than one thing within a single evaluate, but just to confuseus, the & is used to link separate things! We need then our 5things within “ “ and linked by a & . Just to help us get a little less confusedlets use & for the VBA and & for the excel Spreadsheet!

…TO NEXT REPLYBECAUSE OF SIZE CONSTRAINTS HERE!

DocAElstein
08-23-2014, 03:49 AM
So theEquivalent code would be

Sub TestEvaluaten1_1n2n3()
Range("H2")= Evaluate("B2" & "&" & "C2" & "&" & "D2")
End Sub

Typically we wouldprefer to re-write the Excel Spreadsheet formula to make things a bit easier tosee:
=B2&" "&C2&" "&D2 or =B2&" - "&C2&" - "&D2 etc.

For theequivalent code we must again think like wot VBA is! After the "&" bit VBA iseffectively thinking it is in an excel Spread sheet and will except our " " , but then it needs a following "&" bit to get back out to the point where it went in.So the code is

SubTestEvaluate2_n1n2n3()
Range("H2")= Evaluate("B2" & "&"" ""&" & "C2" & "&"" ""&" & "D2")
End Sub

And to penultimately complete this bit of preliminary syntax Stuff, using that example ofa combination of Spreadsheet Functions and VBA we have correspondingly:

Sub TestEvaluateVBA1_n1n2n3()
Range("H2")= Evaluate(" " &Range("B2").Address & " " & "&"" ""&" & " " & Range("C2").Address & " " & "&"" ""&" & " " & Range("D2").Address & " ")
End Sub

I said Pen ultimately as if one carefully looks at the last Code, and againtries to think how VBA thinks, in this particular code we go out of VBA codewith & " " & inorder to use "&" , thenafter our Excel spreadsheet space " " we go back in with & " "& . This is perfectly OK and correct. However specifically here inthis example we have two blue & andeffectively ending up where we started. That takes a bit of thinking about. Butonce you get it you realize that & " " & can bereplaced in this instance with & or &
. So an Ultimate code would be
Sub TestEvaluateVBA1b_n1n2n3()
Range("H2") =Evaluate(" " &Range("B2").Address & "&"" ""&" &Range("C2").Address & "&"" ""&" &Range("D2").Address & "")
End Sub
. I personally would stick with thePenultimate. It helps me understand wot is going on.


…TO NEXT REPLYBECAUSE OF SIZE CONSTRAINTS HERE!

DocAElstein
08-23-2014, 03:51 AM
………………
Finally gettingback to the Concatenating stuff and my original Problem:

(. Actually Iwas concatenating eventually above and used two methods: The spreadsheet methodand the VBA code method!)

. The Penultimate line could be (as it is inthe actual Code giving me problems to understand) re-written to includemultiple ranges (And in the practice is often sowritten because of speed advantages over a loop method in repeated calculations – but hat is a separate Theme notdirectly related to my problem)

SubTestEvaluateVBA3_n1n2n3()
DimRangeH3H4 As Range, RangeB3B4 As Range,RangeC3C4 As Range, RangeD3D4 As Range
Set RangeH3H4 =Range("H3:H4")
Set RangeB3B4 =Range("B3:B4")
Set RangeC3C4 =Range("C3:C4")
Set RangeD3D4 =Range("D3:D4")
RangeH3H4 =Evaluate(" " &RangeB3B4.Address & " "& "&"" ""&" & " " & RangeC3C4.Address & "" &"&"" ""&" & "" & RangeD3D4.Address &"")
End Sub
The above codeworks .

. It works for any number of concatenations. Going backwards forexample to just 2 numbers the code would be

SubTestEvaluateVBA3_n1n2()
DimRangeH3H4 As Range, RangeB3B4 As Range,RangeC3C4 As Range
Set RangeH3H4 =Range("H3:H4")
Set RangeB3B4 =Range("B3:B4")
Set RangeC3C4 =Range("C3:C4")
RangeH3H4 =Evaluate(" " &RangeB3B4.Address & " "& "&"" ""&" & " " & RangeC3C4.Address & "")
End Sub
The above code workstoo!

The code for onesimple concatenation is

SubTestEvaluateVBA3_n1()
DimRangeH3H4 As Range, RangeB3B4 As Range
Set RangeH3H4 =Range("H3:H4")
Set RangeB3B4 =Range("B3:B4")
RangeH3H4 =Evaluate(" " &RangeB3B4.Address & "")
End Sub

BUT IT DOES NOT WORK?!?!

…TO NEXT REPLYBECAUSE OF SIZE CONSTRAINTS HERE!

DocAElstein
08-23-2014, 03:53 AM
…TO NEXT REPLYBECAUSE OF SIZE CONSTRAINTS HERE!


. Now we hit on a really tricky problem…I have rackedmy brain and tried various example files and there appears to be no consistentanswer. The nearest to date is probably

……………The conditional evaluation returns an array of values, whereas adirect non-conditional evaluation would return a single value 'in some cases'.There could be a valid theory behind that, but that is not something I am privyto……………….
. I get the feeling nobody is "privy" to this theory. There are some ideasalong the lines…… " ….The reason is that if the Excel functionused in Evaluate does not accept an array, the Evaluate function will not returnan array…. " That seems just a general not always correct answer.
. For example, if the last Code was concerned with simple numbers,then a modification to this code results in it working. The modification issimply to multiply the nuber by 1!!
. Here the code:
SubTestEvaluateVBA3_n1_x1()
DimRangeH3H4 As Range, RangeB3B4 As Range
Set RangeH3H4 =Range("H3:H4")
Set RangeB3B4 =Range("B3:B4")
RangeH3H4 =Evaluate(" " &RangeB3B4.Address & "" & "*1")
End Sub

…..It works!!

. Similarly, concatenating with more complexcalculations I found not to work!?!

. Without making this thread even moreunreadable because of its length, I will only briefly touch on the theory whichsounds half believable despite not explaining all the results I have. This sayscrudely translated too everyday language something like:- Adding an IF ROW() bit ( or IF Column() bit for that matter) to theline will return a Boolean 1 which somehow forces it to work. If in ourexample we should theoretically use Row(B3:B4) but in the practice ROW() ( orColumn() ) seems to work just as well

. You must be careful again with the Syntax change for the IF bit:

Original Codeline:
= Evaluate( Original_Bit_Within_Evaluate_Brackets )

Modified codelineWith IF bit:
= Evaluate( "IF(Row()," & Original_Bit_Within_Evaluate_Brackets &")" )


. So maybe I am sort of partly there with ananswer to my original question in a long round about way, )even if along theway I almost forgot what it was!!).
. The code line originally giving me problemswas this:

FinalTableFirstColumnRange.Offset(0,1) = Evaluate("IF(ROW()," & SourceTableRange.Columns(2).Address& "&"" - ""&" &SourceTableRange.Columns(3).Address & "&"" -""&" & SourceTableRange.Columns(4).Address &")")

. Rewritten with full (The "Penultimate type") Syntax and highlighting the IF bit looks like this,

. FinalTableFirstColumnRange.Offset(0, 1) = Evaluate("IF(Row()," & " " & SourceTableRange.Columns(2).Address& " " & "&"" - ""&" & " " & SourceTableRange.Columns(3).Address & " " & "&"" - ""&" & " " & SourceTableRange.Columns(4).Address & " " &")")

. As it is a "simple" concatenating line the IF bit can be removed to simplify the code like this

. FinalTableFirstColumnRange.Offset(0, 1) = Evaluate(" " & SourceTableRange.Columns(2).Address & " " & "&"" - ""&" & " " & SourceTableRange.Columns(3).Address & " " & "&"" - ""&" & " " & SourceTableRange.Columns(4).Address & " ")

…TO NEXT REPLYBECAUSE OF SIZE CONSTRAINTS HERE!

DocAElstein
08-23-2014, 03:54 AM
. The final codeworks. Rick probably knew that. But because of the uncertainties in if when wotwith this Evaluation thing it is probably best just always to leave it in to beon the safe side. For nowthat is my answer!!!!


. Sorry to have rambled a bit. But it helped meto answer my very first Question about one line in a code from Rick. Sorry ifit confuses any other “viewers”, but maybe for any one “concatenating” in VBAor looking for a method of getting their Multiple columns in to single columnin may be a worthwhile contribution. Lets rely on the “Power of Google” to get such a person here!?

Alan Elston
Bavaria

DocAElstein
09-20-2014, 03:31 AM
Hi,

VBA Evaluate Range and VLOOKUP

(This is a copy of the Thread here: P.s. I will also post this Thread Here: VBA Evaluate Range and VLOOKUP (http://www.mrexcel.com/forum/excel-questions/806702-visual-basic-applications-evaluate-range-vlookup.html?#post3944034))

As a beginner I may be going a bit above my head!!

After studying and participating at some considerable length in Threads and links to do with using the Evaluate function to speed things up, I thought I understood it. Here are some of those links and Threads. (www.excelfox.com/forum/f22/concatenating-balls-1891/ (http://www.excelfox.com/forum/f22/concatenating-balls-1891/) VBA Trick of the Week :: Avoid Loop for Range Calculations – Evaluate | Useful Gyaan (http://usefulgyaan.wordpress.com/2013/06/19/avoid-loop-for-range-calculations-evaluate/) )

. So … the following simplified example File (XL2007 .xlsm)
https://app.box.com/s/pr78mhna00advvhsrmvi
has a Spreadsheet LEFT Function and a Spreadsheet VLOOKUP Function

The results look good! (That is to say wot I expect!) :-

DocAElstein
09-20-2014, 03:36 AM
did not work see here: where it did....
http://www.excelfox.com/forum/f17/html-spreadsheet-test-1899/

DocAElstein
09-20-2014, 03:40 AM
I apply this code


Sub Evaluate_Left()Dim rngName As Range
Set rngName = ThisWorkbook.Worksheets("Sheet1").Range("A3:A10")
Dim rngEE As Range
Set rngEE = ThisWorkbook.Worksheets("sheet1").Range("E3:E10")
Let rngEE = Evaluate("if(row(3:10),LEFT(" & rngName.Address & ",4))")
End Sub 'Evaluate_Left()

and again get wot I expact....

see again...
http://www.excelfox.com/forum/f17/html-spreadsheet-test-1899/

Now I apply this code


Sub Evaluate_VLOOKUP()Dim rngName As Range
Set rngName = ThisWorkbook.Worksheets("Sheet1").Range("A3:A10")
Dim rngCC As Range
Set rngCC = ThisWorkbook.Worksheets("sheet1").Range("C3:C10")
Let rngCC = Evaluate("if(row(3:10),VLOOKUP(" & rngName.Address & ",$A$16:$C$33,3,FALSE))")
End Sub 'Evaluate_VLOOKUP()

DocAElstein
09-20-2014, 03:43 AM
and get this:

see again:
http://www.excelfox.com/forum/f17/html-spreadsheet-test-1899/


. I would have expected that result without The extra If Row() stuff, which I thought overcame this problem.
. can anyone suggest wot is going wrong, or how I obtain the correct results (Using the Evaluate Function for a range)
Thanks
Alan.


P.s. I can post a spreadsheet in the test area but not apparently here in a thread??. Can you help me on that one as well?

MARK858
10-12-2014, 11:13 PM
Hi DocAElstein, just as a pointer to your trouble with posting Html tables.
On vBulletin based forums there is a box in the bottom right corner that tells you what posting permissions can be used on each forum.
In this case HTML code is turned off.

http://i1371.photobucket.com/albums/ag308/samdog011/postings_zpsd2f882ba.jpg (http://s1371.photobucket.com/user/samdog011/media/postings_zpsd2f882ba.jpg.html)

DocAElstein
10-13-2014, 01:07 AM
Hi DocAElstein, just as a pointer to your trouble with posting Html tables.
On vBulletin based forums there is a box in the bottom right corner that tells you what posting permissions can be used on each forum.
In this case HTML code is turned off.



Thanks.
. Any idea how I can "turn it on"?
Alan

MARK858
10-13-2014, 05:43 AM
You can't, the Forum Admin decide and control what permissions are allowed in each forum.
In general in my experience it is quite general that if a forum allows attachments (like this one does) then HTML is switched off.

DocAElstein
10-13-2014, 02:07 PM
You can't, the Forum Admin decide and control what permissions are allowed in each forum.
In general in my experience it is quite general that if a forum allows attachments (like this one does) then HTML is switched off.

OK.,
. I will look into the use of "attachments" next time!

Thanks
Alan

DocAElstein
09-16-2015, 03:25 PM
Re: Appendix Thread. ( Codes for other Threads, HTML Tables, etc. )<o:p></o:p>
<o:p> </o:p>
Hi<o:p></o:p>
. I would like to use this Thread as an Appendix for codes in other Threads so as to help reduce clutter in that Thread should the code be a bit long, or not directly relevant.<o:p></o:p>
. Also as HTML code is on in this Test Sub Forum I would like to reference HTML Tables should I wish to use them in answering threads<o:p></o:p>
<o:p> </o:p>
@ Moderators, Administrator:<o:p></o:p>
. I hope the above is OK to do and if so please do not delete this Thread. ( Or advise if I should post my "Appendix" somewhere else ( If possible where HTML code is on ) )<o:p></o:p>
.<o:p></o:p>
. Many Thanks<o:p></o:p>
Alan<o:p></o:p>



This Post 2834 https://excelfox.com/forum/showthread.php/2834-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=18462&viewfull=1#post18462
https://excelfox.com/forum/showthread.php/2834-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)#post18462


(Copied from 2345)

DocAElstein
06-08-2016, 02:24 PM
Function Code for getting Column Letter from Column Number
Shortened version used in Post #14
http://www.excelfox.com/forum/showthread.php/2083-Delete-One-Row-From-A-2D-Variant-Array?p=9837#post9837
Public Function CL(ByVal lclm As Long) As String

And Fuller version with explaining ‘Comments



Public Function CL(ByVal lclm As Long) As String ' http://www.excelforum.com/development-testing-forum/1101544-thread-post-appendix-no-reply-needed-please-do-not-delete-thanks-4.html#post4213980
Do: Let CL = Chr(65 + (((lclm - 1) Mod 26))) & CL: Let lclm = (lclm - (1)) \ 26: Loop While lclm > 0
End Function

Function FukOutChrWithDoWhile(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Dim rest As Long 'Variable for what is "left over" after subtracting as many full 26's as possible
Do
' Let rest = ((lclm - 1) Mod 26) 'Gives 0 to 25 for Column Number "Left over" 1 to 26. Better than ( lclm Mod 26 ) which gives 1 to 25 for clm 1 to 25 then 0 for 26
' Let FukOutChrWithDoWhile = Chr(65 + rest) & FukOutChrWithDoWhile 'Convert rest to Chr Number, initially with full number so the "units" (0-25), then number of 26's left over (if the number was so big to give any amount of 26's in it, then number of 26's in the 26's left over (if the number was so big to give any amount of 26 x 26's in it, Enit ?
' 'OR
Let FukOutChrWithDoWhile = Chr(65 + (((lclm - 1) Mod 26))) & FukOutChrWithDoWhile
Let lclm = (lclm - (1)) \ 26 'This gives the number of 26's ( if any ), but just the excact part, in the next number down , - so applying the rest formula to this new number will again leave a difference "left over" rest.
'lclm = (lclm - (rest + 1)) \ 26 ' As the number is effectively truncated here, any number from 1 to (rest +1) will do in the formula
Loop While lclm > 0 'Only loop further if number was big enough to still have 0-25's in it
End Function
Rem Ref http://www.excelforum.com/development-testing-forum/1101544-thread-post-appendix-no-reply-needed-please-do-not-delete-thanks-4.html#post4213980
Rem Ref http://www.excelforum.com/tips-and-tutorials/1108643-vba-column-letter-from-column-number-explained.html

DocAElstein
06-08-2016, 11:12 PM
Second Code with further lines to overcome extra () required for start row and star column codes



Obtaining grid coordinates for an Area of contiguous cells in a Spreadsheet using [ ] and Evaluate(" ") through the use of a Named Range for that Area

Aka ' It is a Range Name Test 2: Its n Range Name Test 2: 's 'n Rng Name Test 2: s n Rg Name Testie 2: snRg.Name = "snRgNme"
This code is in support of other Posts in various Threads. ( I will edit the Links as I reference this post )




The code takes in a hard coded Range, A1:E10.
That Range is given a Name as held in the Names Register of a Workbook ( Workbooks Scope ).
Various code lines are developed which reference this Named Range and return the Grid Coordinates.

These coordinates are held within the following Long Type Variables
Cs is the column count
sClm is the start column
stpClm is the stop column
Rs is the rows count start row
sRw is the start row
stpRw is the stop row


' Code 2
'10 ' It is a Range Name Test 2: Its n Range Name Test 2: 's 'n Rng Name Test 2: s n Rg Name Testie 2: snRg.Name = "snRgNme"
Sub snRgNameTest2() ' Inspired by.. snb .. " array [ ] " ' http://www.excelfox.com/forum/showthread.php/2083-Delete-One-Row-From-A-2D-Variant-Array?p=9714#post9714
20 ' Worksheets Info
30 Dim ws As Worksheet ' ' Preparing a "Pointer" to an Initial "Blue Print" ( or a Form, or a Questionnaire not yet filled in, a template etc.) in Memory of the Object ( Pigeon Hole with a bit of paper or code lines on that can be filled in to refer to a specific Object of this type ) . This also us to get easily at the Methods and Properties through the applying of a period ( .Dot) ( intellisense )
40 'Set ws = ThisWorkbook.Worksheets("NPueyoGyanArraySlicing") 'The worksheets collection object is used to Set ws to the Sheet we are playing with, so that we carefull allways referrence this so as not to go astray through Excel Guessing inplicitly not the one we want... ' Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191
50 Set ws = ActiveSheet ' Alternative to last line, make code apply to the current active sheet, - That being "looked at" when running this code '
60 Dim vTemp As Variant ' To help development when you are not sure what type is retuned. "Suck and see what comnes out!" Highlight it and Hit Shift+F9 to see it in the imediate Window
70 ' Named Range referrencing ' Workbooks ( Default ) Scope Invoke Pike Evaluate Rabbit Rabbit. How's the Bunny ? Bunnytations Banters
80 Dim snRg As Range: Set snRg = ws.Range("A1:E10")
90 Dim sName As String: Let sName = "snRgNme" '
100 Let snRg.Name = "snRgNme" ' It is a Range Name me - " 's 'n Range Name me " .. "snRgNme" ;) This name appears permanentlly in then sheet. It remains referrencing this range unless the name iis deleted or the range referrenced is overwritten by a similar code line which has a different range in it on RHS of = http://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
110 Let snRg.Name = sName ' Identical to last line
120
130 '== DANGER: === Pitful: Above we gave the Range Object a Name, but now see what "Name" or "Name" 's comes back "!" !
131 Dim clms() As Variant 'Array to take returned Variant type Field of sequential column numbers
132 Dim retRefstrName As String, retObjName As Object
133 Let retRefstrName = snRg.Name: Set retObjName = snRg.Name: Debug.Print snRg.Name 'something of the form "NPueyoGyanArraySlicing!$A$1:$E$10" is reveald in Immediate ( Ctrl+G when in VB Editor ) Window
134 'Let clms() = Evaluate("column(=NPueyoGyanArraySlicing!$A$1:$E$10)") 'Let clms() = Evaluate("column(" & retRefstrName & ")")' Rintime Error 13: Incompatiblee types
135 Let clms() = Evaluate("column(NPueyoGyanArraySlicing!$A$1:$E$10)") 'Works
137 Dim NameOnly As String: Let NameOnly = Replace((snRg.Name), "!", "", (InStr(1, (snRg.Name), "!"))): 'Debug.Print snRg.Name: Dim pos&: pos = InStr(1, (snRg.Name), "!"): NameOnly = Replace((snRg.Name), "!", "", pos) ' We had ---- "NPueyoGyanArraySlicing!$A$1:$E$10" This is a String referrece returned when the Name Object is used directly or set to a String Variable. so here I return a string that starts at the position of the ! and which replaces in that truncated shortened string - "!$A$1:$E$10" the "!" with nothing
138 Let clms() = Evaluate("column(" & NameOnly & ")"): Let clms() = Evaluate("column(" & Replace((snRg.Name), "!", "", (InStr(1, (snRg.Name), "!"))) & ")")
139
140 Dim strName As String: Let strName = snRg.Name.Name: Debug.Print strName: Let strName = retObjName.Name: Debug.Print strName ' returns our original "CoN"
142 Let clms() = Evaluate("column(" & strName & ")")
150 Dim rngF1G2 As Range: Set rngF1G2 = Range("F1:G2"): Let Range("F1:G2").Value = "From Line 150"
151 Let Range("=NPueyoGyanArraySlicing!F1:G2").Value = "From Line 151"
152 Let rngF1G2.Name = "snFG": Let Range("snFG").Value = "From Line 152"
153
154
159 '===============
160 Let clms() = Evaluate("column(snRgNme)"): Let clms() = [column(snRgNme)] ' Full and "shorthand" Simple 1 D "pseudo horizontal" Array of column Indicies.
170 '
180 ' Count, Start, and Stop of columns in an Area of contiguous cells in a Spreadsheet
190 Dim Cs As Long 'Variable for ColumnsCount. -This makes a Pigeon Hole sufficient in construction to house a piece of Paper with code text giving the relevant information for the particular Variable Type. VBA is sent to it when it passes it. In a Routine it may be given a particular "Value", or ("Values" for Objects). There instructions say then how to do that and handle(store) that(those). At Dim the created Paper is like a Blue Print that has some empty spaces not yet filled in. Long is very simple to handle, final memory "size" type is known (13.456, 00.001 have same "size" computer memory ),so an Address suggestion can be given for when the variable is filled in. (Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647). If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.-upon/after 32-bit, Integers (Short) need converted internally anyway, so a Long is actually faster)
200 Let Cs = Evaluate("columns(snRgNme)") ' = 5
210 'Let Cs = Evaluate("columns(RetunedsnRgName)") 'Run time Error as expected
220 Let Cs = [columns(snRgNme)] ' = 5 'Is this Most Powerful Command in VBA?, or what ... http://www.ozgrid.com/forum/showthread.php?t=52372 http://www.mrexcel.com/forum/excel-questions/899117-visual-basic-applications-range-a1-a5-vs-%5Ba1-a5%5D-benefits-dangers.html
230 'Let Cs = [columns(RetunedsnRgName)] 'Run time Error as expected
240 Let Cs = [columns(A1:E10)] ' = 5
250 Let vTemp = Evaluate("column(snRgNme)") ' Reveals an Array {1, 2, 3, 4, 5} - 1 Dimension "pseudo Horizontal" Array
260 Dim sClm As Long 'Variable for Start Column
270 Let sClm = Evaluate("column(A1:E10)")(1)
280 Let sClm = Evaluate("column(snRgNme)")(1) ' = 1
290 Let sClm = [column(A1:E10)]()(1)
300 Let sClm = [column(snRgNme)]()(1)
301
302 Let sClm = Evaluate("=MIN(column(snRgNme))"): Let sClm = [=MIN(column(snRgNme))] 'Alternative using Spreadsheet Functions to avoid having to VBA ()( ) after the Evaluate
329 '
330 Dim stpClm% ' Variable for Stop column Number ' ( % is shorthand for As Long ..http://www.excelforum.com/showthread.php?t=1116127&p=4256569#post4256569
340 Let stpClm = sClm + (Cs - 1) ' = 5
350 ' [ ]
360 Let stpClm = [column(A1:E10)]()(1) + ([columns(A1:E10)] - 1)
370 Let stpClm = [column(snRgNme)]()(1) + ([columns(snRgNme)] - 1)
380 ' In between step [ ] and Evaluate(" ")
390 Let stpClm = [column(snRgNme)]()(UBound([column(snRgNme)]))
400 ' Now Full Evaluate(" ")
410 Let stpClm = Evaluate("column(snRgNme)")(1) + (Evaluate("columns(snRgNme)") - 1)
420 Let stpClm = Evaluate("column(snRgNme)")(UBound(Evaluate("column(snRgNme)")))
421
430 Let stpClm = Evaluate("=MIN(column(snRgNme))") + (Evaluate("columns(snRgNme)") - 1) ''Alternatives using Spreadsheet Functions to avoid having to VBA ()( ) after the Evaluate
431 Let stpClm = [=MIN(column(snRgNme))] + ([columns(snRgNme)] - 1)
432 Let stpClm = [=MIN(column(snRgNme)) + (columns(snRgNme) - 1)]
439 '
440 ' Start, Count and Stop of rows in an Area of contiguous cells in a Spreadsheet
450 Dim Rs As Long 'Rows Count
460 Let Rs = Evaluate("rows(snRgNme)")
470 Let Rs = [rows(snRgNme)]
480 Let Rs = [rows(A1:E10)]
490 Let vTemp = Evaluate("row(snRgNme)") ' = {1; 2; 3; 4; 5; 6; 7; 8; 9; 10}
500 Dim sRw As Long 'Start Row
510 Let sRw = Evaluate("row(A1:E10)")(1, 1) 'Note a 2 Dimensional, 1 column, "vertical" Array is returned : ' vTemp = {1; 2; 3; 4; 5; 6; 7; 8; 9; 10}
520 Let sRw = Evaluate("row(snRgNme)")(1, 1)
530 Let sRw = [row(A1:E10)]()(1, 1)
540 Let sRw = [row(snRgNme)]()(1, 1)
541
550 Let sRw = Evaluate("=MIN(Row(snRgNme))"): Let sRw = [=MIN(Row(snRgNme))] '''Alternatives using Spreadsheet Functions to avoid having to VBA ()( ) after the Evaluate
560
570 Dim stpRw% 'Stop Row
580 Let stpRw = sRw + (Rs - 1)
590 Let stpRw = [row(A1:E10)]()(1, 1) + ([rows(A1:E10)] - 1)
600 Let stpRw = [row(snRgNme)]()(1, 1) + ([rows(snRgNme)] - 1)
610 '
620 Let stpRw = [row(snRgNme)]()(UBound([row(snRgNme)], 1), 1) 'UBound([row(snRgNme)], 1) is Ubound first ( "row" ) dimension. UBound([row(snRgNme)], 2) would be the second dimension ( "column" ) count
630 '
640 Let stpRw = Evaluate("row(snRgNme)")(1, 1) + (Evaluate("rows(snRgNme)") - 1)
650 Let stpRw = Evaluate("row(snRgNme)")(UBound(Evaluate("row(snRgNme)")), 1)
660 '
670 Let stpRw = Evaluate("=MIN(Row(snRgNme))") + (Evaluate("rows(snRgNme)") - 1) ''''Alternatives using Spreadsheet Functions to avoid having to VBA ()( ) after the Evaluate
680 Let stpRw = [=MIN(Row(snRgNme))] + [rows(snRgNme)] - 1
690 Let stpRw = [=MIN(Row(snRgNme))] + [rows(snRgNme)] - 1
700 Let stpRw = [=MIN(Row(snRgNme)) + rows(snRgNme) - 1]
End Sub

DocAElstein
06-08-2016, 11:42 PM
Alternative Codes using [ ] shorthand
Delete One Row From A 2D Excel Range Area

' To Test Function, Type some arbitrary values in range A1:E10, step through Main Test Code in F8 Debug Mode in VB Editor, and examine Worksheet, Immediate Window ( Ctrl+G when in VB Editor ), hover over variables in the VB Editor Window with mouse cursor, set watches on variables ( Highlight any occurrence of a variable in the VB Editor and Hit Shift+F9 ) , etc.. and then you should expected the required Output to be pasted out starting Top Left at cell M17



' Delete One Row From A 2D Excel Range Area
' To Test Function, Type some arbitrary values in range A1:E10, step through code in F8 Debug Mode in VB Editor, and examine Worksheet, Immediate Window ( Ctrl+G when in VB Editor ), hover over variables in the VB Editor Window with mouse cursor, set watches on variables ( Highlight any occurrence of a variable in the VB Editor and Hit Shift+F9 ) , etc.. and then you should expected the required Output to be pasted out starting Top Left at cell M17
' "Short hand", ShtHd, version using []
' requires snb and kalak "neat trick" so you can to all intents and purpose do very close to doing vba Un Hard coded in [ ] - http://www.excelfox.com/forum/showthread.php/2083-Delete-One-Row-From-A-2D-Variant-Array?p=9714#post9714 http://www.mrexcel.com/forum/excel-questions/899117-visual-basic-applications-range-a1-a5-vs-%5Ba1-a5%5D-benefits-dangers.html#post4331217
' and Evaluate [ ] Properties , AloPerties, Methods - Alan Dynamic Coding Wonks http://www.excelforum.com/excel-programming-vba-macros/1141369-evaluate-and-differences-evaluated-array-return-needs-extra-bracket-for.html#post4400666
Function FuR_AlanShtHd(ByVal rngIn As Range, ByVal FoutRw As Long) As Variant
1 Let rngIn.Name = "snRgNme"
5 Dim vTemp As Variant 'A varyable to fill with something and "suck and see" what you get
10 ' use "neat magic" code line arrOut() = Application.Index(arrIn(), rwsT(), clms()) ' http://www.excelforum.com/excel-new-users-basics/1099995-application-index-with-look-up-rows-and-columns-arguments-as-vba-arrays.html http://www.mrexcel.com/forum/excel-questions/908760-visual-basic-applications-copy-2-dimensional-array-into-1-dimensional-single-column-2.html#post4375354
20 ' BUT in Cells form arrOut() = Application.Index(Cells, rwsT(), clms()) ' http://www.excelforum.com/excel-programming-vba-macros/1105617-trouble-writing-huge-array-into-worksheet-range-2.html
30 Dim ws As Worksheet ' ' Preparing a "Pointer" to an Initial "Blue Print" ( or a Form, or a Questionnaire not yet filled in, a template etc.) in Memory of the Object ( Pigeon Hole with a bit of paper or code lines on that can be filled in to refer to a specific Object of this type ) . This also us to get easily at the Methods and Properties through the applying of a period ( .Dot) ( intellisense )
40 Set ws = rngIn.Parent ' Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191
50 ws.Range("K30").ClearContents: ws.Range("K30").Value = "Here I am, in this Worksheet!"
60 'clms()
70 Dim sClm As Long, Cs As Long 'Variable for Count of, Start Column. - This makes a Pigeon Hole sufficient in construction to house a piece of Paper with code text giving the relevant information for the particular Variable Type. VBA is sent to it when it passes it. In a Routine it may be given a particular "Value", or ("Values" for Objects). There instructions say then how to do that and handle(store) that(those). At Dim the created Paper is like a Blue Print that has some empty spaces not yet filled in. Long is very simple to handle, final memory "size" type is known (13.456, 00.001 have same "size" computer memory ),so an Address suggestion can be given for when the variable is filled in. (Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647). If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.-upon/after 32-bit, Integers (Short) need converted internally anyway, so a Long is actually faster)
80 Let sClm = [=MIN(column(snRgNme))] '###Not needed now. Alternative using Spreadsheet Functions to avoid having to VBA ()( ) after the Evaluate
90 Dim clms() As Variant ' Evaluate Function used below returns a Field of Variant Element Types so the Array Elemments must be Declared appropriately. Must be adynamic Array to accept and be effectivelly sized by the Field size assigned to it.
95 Let clms() = [column(snRgNme)] ' snb Range Name equivalent so ### 'Let clms() = Evaluate("column(" & CL(sClm) & ":" & CL(sClm + (Cs - 1)) & ")")
100
160 'rwsT()
170 Dim sRw As Long, Rs As Long, stpRw As Long '
180 Let sRw = [=MIN(Row(snRgNme))] '''Alternatives using Spreadsheet Functions to avoid having to VBA ()( ) after the Evaluate ' Let sRw = rngIn.Areas.Item(1).Row
190 Let Rs = [rows(snRgNme)] 'Let Rs = rngIn.Areas.Item(1).Rows.Count
191 Let stpRw = [=MIN(Row(snRgNme)) + rows(snRgNme) - 1] '''Alternatives using Spreadsheet Functions to avoid having to VBA ()( ) after the Evaluate
200
240 'Get Full row indicies convenientally ( As 1 D "pseudo horizontal" Array ) from Spreadsheet Column() Function
250 Dim rws() As Variant: Let rws() = Evaluate("column(" & CL(sRw) & ":" & CL(sRw + (Rs - 1)) & ")")
251 Let vTemp = [CL(1)]: vTemp = [CL(MIN(Row(snRgNme)))] 'Both Return "A"
252 vTemp = [CL(MIN(Row(snRgNme)) + rows(snRgNme) - 1)] 'Returns "J"
254 Let rws() = [column(A:J)] ' Works
257 'Let rws() = [column(CL(1):J)] ' Fails - Bug in Excel ! ? !
258 'Let rws() = [column(CL(MIN(Row(snRgNme))):CL(MIN(Row(snRgNme)) + rows(snRgNme) - 1))] ' Fails - Bug in Excel ! ? !
260 Let rws() = Evaluate("column(" & [CL(MIN(Row(snRgNme)))] & ":" & [CL(MIN(Row(snRgNme)) + rows(snRgNme) - 1)] & ")")
270
280 'Get full sequential row indicies in a string.
290 Dim strRws As String: Let strRws = VBA.Strings$.Join(rws(), "|") ' 'The VBA strings collection such as Join in there basic form must not returnn a string, they can also return for example Null, a special type of variant. That lies within it's "powers. - It will coerce even an Empty, or Null to a variant type and return that. That takes extra ( unecerssary work here ). If the result of a function is used as a string or assigned it to a string variable, use the $ form of the function. This results in faster executing code, because a conversion from a variant to a string is unnecessary. http://www.excelforum.com/excel-new-users-basics/1058406-range-dimensioning-range-and-value-referencing-and-referring-to-arrays-5.html#post4084783 I believe that without $ a Strings collection Function coerces the first parameter into Variant, with $ does not - that's why $ is preferable over no $ , it's theoretically more efficient. http://www.xoc.net/standards/rvbacc.asp#DollarSignFunctions
300
330 'Get String with missing row
340 Dim strrwsD As String: Let strrwsD = Replace(strRws, "|" & FoutRw & "", "", 1, -1)
350
360 'Get Array ( 1 D Pseudo Horizontal ) of required row indicies
370 Dim rwsS() As String ' The VBA Strings Collection Function, Split, used below returns a Field of String Element Types so the Array Elemments must be Declared appropriately. It must be adynamic Array to accept and be effectivelly sized by the Field size assigned to it.
375 Let rwsS() = VBA.Strings$.Split(strrwsD, "|", -1)
380 'final Transposed Array for "magic neat" code line
390 Dim rwsT() As String: ReDim rwsT(0 To (UBound(rwsS())), 1 To 1) ' Both the type and size of Array is known so can be decared initially appropriatelly. Re Dim must be used as Dim only takes values, not variables
400 Dim Cnt As Long
410 For Cnt = 0 To UBound(rwsS())
420 Let rwsT(Cnt, 1) = rwsS(Cnt)
430 Next Cnt

440 'Output Array
450 Dim arrOut() As Variant
460 Let arrOut() = Application.Index(ws.Cells, rwsT(), clms()) '"Magic neat" Code line in Cells first argument Form
470
480 Let FuR_AlanShtHd = arrOut()
490
500 ' . Transpose
510 Dim rwsDotT() As Variant ' Transpose Function used below returns a Field of Variant Element Types so the Array Elemments must be Declared appropriately. Must be adynamic Array to accept and be effectivelly sized by the Field size assigned to it.
520 Let rwsDotT() = Application.Transpose(rwsS())
530 Let arrOut() = Application.Index(ws.Cells, rwsDotT(), clms())
540
550 Let FuR_AlanShtHd = arrOut()
'
End Function

DocAElstein
06-26-2016, 10:27 PM
More Named Range Scope Wonks. Problems when Worksheet Scoped WorkSheet is different from Worksheet refered to in RefersTo:= Range Object argument


Here is a another partial solution to the This Thread
http://www.excelforum.com/excel-programming-vba-macros/1141369-evaluate-and-differences-evaluated-array-return-needs-extra-bracket-for.html

It was also used to answer a few questions I had here:
http://www.thespreadsheetguru.com/blog/the-vba-guide-to-named-ranges[I][COLOR="#000080"] ( Comment 22 )
Here is what I wrote there:
Reply Posted at
http://www.thespreadsheetguru.com/blog/the-vba-guide-to-named-ranges
6 th June 2016:

Hi
Hi Just feeding back from my "experiments" over the weekend_...
http://www.excelforum.com/showthread.php?t=1141369&page=2&p=4404276&highlight=#post4404276
_..So now o answer my questions:
_1) I have not yet seen anything to suggest the answer to that is not yes.

DocAElstein
10-23-2016, 02:19 PM
Referrences in suppost of this post:
http://www.excelfox.com/forum/showthread.php/2130-Sort-an-array-based-on-another-array-VBA?p=9985#post9985

and solution to this post
http://www.excelforum.com/excel-programming-vba-macros/1160648-how-to-create-a-pop-up-notification-for-two-different-conditions-at-the-same-time.html#post4507157



' http://www.snb-vba.eu/VBA_Arraylist_en.html
' http://www.snb-vba.eu/VBA_Arraylist_en.html#L_11.3


' https://usefulgyaan.wordpress.com/2013/06/12/vba-trick-of-the-week-slicing-an-array-without-loop-application-index/comment-page-1/#comment-587

' https://usefulgyaan.wordpress.com/2013/06/12/vba-trick-of-the-week-slicing-an-array-without-loop-application-index/comment-page-1/#comment-515






' https://usefulgyaan.wordpress.com/2013/06/12/vba-trick-of-the-week-slicing-an-array-without-loop-application-index/comment-page-1/#comment-587
Sub M_snbSortof() ' http://www.snb-vba.eu/VBA_Arraylist_en.html#L_11.3
Dim rngVoll As Range: Set rngVoll = Tabelle3.Range("A1:E10")
Dim snAll() As Variant, Sported() As Variant
Let snAll() = rngVoll.Value
Dim j As Long, jj As Long
With CreateObject("System.Collections.Arraylist")
For j = 1 To UBound(snAll(), 1)
.Add snAll(j, 3)
Next
.Sort
Let Sported() = .ToArray
.Clear
For j = 0 To UBound(Sported())
For jj = 1 To UBound(snAll(), 1)
If snAll(jj, 3) = Sported(j) Then
' Use Range to overcome Array size Limits of Worksheets Functions
'Dim Clm As Range: Set Clm = Application.Index(rngVoll, jj, 0)
' .Add Clm.Value
' .Add (Application.Index(rngVoll, jj, 0).Value)

' Use Cells to overcome Array size Limits of Worksheets Functions
Dim LB As Long, UB As Long '…User Given start and Stop Column as a Number
Let LB = LBound(snAll(), 2): Let UB = UBound(snAll(), 2)
Dim strLtrLB As String, strLtrUB As String '…Column Letter corresponding to Column Number
'There are many ways to get a Column Letter from a Column Number – excelforum.com/tips-and-tutorials/1108643-vba-column-letter-from-column-number-explained.html
Let strLtrLB = Split(Cells(1, LB).Address, "$")(1) 'An Address Method
Let strLtrUB = Replace (Replace(Cells(1, UB).Address, "1", ""), "$", "") 'A Replace Method
'Obtain Column Indicies using Spreadsheet Function Column via VBA Evaluate Method
Dim clms() As Variant
Let clms() = Evaluate("column(" & strLtrLB & ":" & strLtrUB & ")") 'Returns 1 D “pseudo” Horizontal Array of sequential numbers from column number of LB to UB
'Or
clms() = Evaluate("column(" & Split(Cells(1, LB).Address, "$")(1) & ":" & Replace (Replace(Cells(1, UB).Address, "1", ""), "$", "") & ")")
.Add (Application.Index(Tabelle3.Cells, jj, clms()))

'Let snAll(jj, 3) = ""
Exit For
End If
Next jj
Next j
For j = 0 To .Count - 1
Tabelle3.Cells(j + 1 + 10, 1).Resize(, UBound(snAll, 2)) = .Item(j)
Next j
End With
End Sub
'
Sub M_snb()
Dim sn, sp, j As Long, jj As Long
sn = Tabelle3.Range("A1:E10")
With CreateObject("System.Collections.Arraylist")
For j = 1 To UBound(sn)
.Add sn(j, 3)
Next
.Sort
sp = .ToArray
.Clear
For j = 0 To UBound(sp)
For jj = 1 To UBound(sn)
If sn(jj, 3) = sp(j) Then
.Add Application.Index(sn, jj)
sn(jj, 3) = ""
Exit For
End If
Next
Next
For j = 0 To .Count - 1
Tabelle3.Cells((j + 1) + 10, 1).Resize(, UBound(sn, 2)) = .Item(j)
Next
End With
End Sub































'Rem Ref
' http://www.excelforum.com/excel-programming-vba-macros/1139207-how-to-move-a-userform-and-module-from-one-book-to-another-2.html
' http://www.excelforum.com/excel-programming-vba-macros/1138300-vba-userform-value-check-if-user-form-buttons-checked-not-working-check-button-on-open.html
' http://www.excelforum.com/excel-programming-vba-macros/1139742-workbooks_open-crashes-when-file-opened-with-code-manually-open-ok-userform-issue.html
' http://www.excelfox.com/forum/showthread.php/2130-Sort-an-array-based-on-another-array-VBA?p=9985#post9985
' http://www.snb-vba.eu/VBA_Arraylist_en.html
' http://www.snb-vba.eu/VBA_Arraylist_en.html#L_11.3
' http://www.excelforum.com/showthread.php?t=1154829&page=4#post4502593
' http://www.excelforum.com/excel-programming-vba-macros/1160648-how-to-create-a-pop-up-notification-for-two-different-conditions-at-the-same-time.html#post4507157
' http://www.excelfox.com/forum/showthread.php/2130-Sort-an-array-based-on-another-array-VBA?p=9985#post9985






http://www.excelforum.com/showthread.php?t=1154829&page=4#post4502593

DocAElstein
01-30-2017, 04:58 AM
Coding for this main Thread post

https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=24132&viewfull=1#post24132


' https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=18479&viewfull=1#post18479
Sub CarriageReturnLineFeedExcelVBAFormula() ' https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=24132&viewfull=1#post24132
Call TidyCellView2
Rem 2 Put formula in Cell
' 2a CHAR(13)&CHAR(10)
Let Range("B10") = "=""a""" & "&" & "CHAR(13)&CHAR(10)" & "&" & """b""" ' For VBA
' simplify a bit as Evaluate(" ") can't return the VBA " & " - it will simply join them
Let Range("B10") = "=""a""&CHAR(13)&CHAR(10)&""b""" ' For VBA

Dim strEval As String
Let strEval = """" & "=" & """" & """" & "a" & """" & """" & "&" & "CHAR(13)&CHAR(10)" & "&" & """" & """" & "b" & """" & """" & """"
Debug.Print strEval ' "=""a""&CHAR(13)&CHAR(10)&""b"""
Let Range("B10") = Evaluate(strEval)
Let Range("B10") = Evaluate("""" & "=" & """" & """" & "a" & """" & """" & "&" & "CHAR(13)&CHAR(10)" & "&" & """" & """" & "b" & """" & """" & """")
Debug.Print strEval ' "=""a""&CHAR(13)&CHAR(10)&""b"""
Debug.Print Evaluate("""" & "=" & """" & """" & "a" & """" & """" & "&" & "CHAR(13)&CHAR(10)" & "&" & """" & """" & "b" & """" & """" & """") ' gives ="a"&CHAR(13)&CHAR(10)&"b" This is what gets put in the cell, the string seen in VBa
' final simplification - simply remove all " & " bits
Let Range("B10") = Evaluate("""=""""a""""&CHAR(13)&CHAR(10)&""""b""""""")
Let Range("B10") = Evaluate("=""=""""a""""&CHAR(13)&CHAR(10)&""""b""""""")

' 2b vbCr & vbLf
' 2b(i)

' 2b(ii)
' strEval = """" & "=" & """" & """" & "a" & """" & """" & "&" & "CHAR(13)&CHAR(10)" & "&" & """" & """" & "b" & """" & """" & """"
Let strEval = """" & "=" & """" & """" & "a" & """" & """" & "&" & """" & """" & vbCr & vbLf & """" & """" & "&" & """" & """" & "b" & """" & """" & """"

Debug.Print strEval ' "=""a""&""
' ""&""b"""
Debug.Print Evaluate(strEval)

Let Range("C10") = Evaluate(strEval)
Let Range("C10") = Evaluate("""" & "=" & """" & """" & "a" & """" & """" & "&" & """" & """" & vbCr & vbLf & """" & """" & "&" & """" & """" & "b" & """" & """" & """")
' final simplification - simply remove all " & " bits
Let Range("C10") = Evaluate("""=""""a""""&""""" & vbCr & vbLf & """""&""""b""""""")
Let Range("C10") = Evaluate("=""=""""a""""&""""" & vbCr & vbLf & """""&""""b""""""")




End Sub



Public Sub TidyCellView() ' A few things to make things in the demo look closer to what they are, to help demo purpposes
With Rows("1:4")
.RowHeight = 30 ' So we see two rows in a cell. Sometimes it might happen automatically if we are playing around with text of two lines, but not always - This is because Excel is quite good at guessing what we want to see, and changes thins appropriately but it does not always guess correctly
.WrapText = True ' This makes sure that rows Usually Excel guesses we want this when we are playing around with line breaks in cell text,but not always. If it does not geuss correct then it might show a multi-line text in this sort of form, with the lines tacked on to each other with no indication of any line break characters that may be there Line1Line2Line3 etc.
.VerticalAlignment = xlTop: .HorizontalAlignment = xlLeft ' Thes two makes sure any text we have will start top left, otherwise Excel may occaisionally mess this up and give us misleading views
End With
Let Application.FormulaBarHeight = 2
End Sub
Public Sub TidyCellView2() ' A few things to make things in the demo look closer to what they are, to help demo purpposes
With Rows("10")
.RowHeight = 30 ' So we see two rows in a cell. Sometimes it might happen automatically if we are playing around with text of two lines, but not always - This is because Excel is quite good at guessing what we want to see, and changes thins appropriately but it does not always guess correctly
.WrapText = True ' This makes sure that rows Usually Excel guesses we want this when we are playing around with line breaks in cell text,but not always. If it does not geuss correct then it might show a multi-line text in this sort of form, with the lines tacked on to each other with no indication of any line break characters that may be there Line1Line2Line3 etc.
.VerticalAlignment = xlTop: .HorizontalAlignment = xlLeft ' Thes two makes sure any text we have will start top left, otherwise Excel may occaisionally mess this up and give us misleading views
End With
Let Application.FormulaBarHeight = 2
End Sub

DocAElstein
02-03-2017, 07:13 PM
Code for Nelson in this Thread
http://www.excelfox.com/forum/showthread.php/2144-Code-Required-to-calculate-number-of-days-worked-normal-overtime-and-holiday-overtime
http://www.excelfox.com/forum/showthread.php/2144-Code-Required-to-calculate-number-of-days-worked-normal-overtime-and-holiday-overtime?p=10060#post10060



Option Explicit
Sub IJAdjustTotalAllWorksheet() ' http://www.excelfox.com/forum/showthread.php/2144-Code-Required-to-calculate-number-of-days-worked-normal-overtime-and-holiday-overtime?p=10060#post10060
Rem 1) Workbooks Info.
Dim Wb As Workbook ' Dim: For Object variabls: Address location to a "pointer". That has all the actual memory locations (addresses) of the various property values , and it holds all the instructions what / how to change them , should that be wanted later. That helped explain what occurs when passing an Object to a Call ed Fucntion or Sub Routine By Val ue. In such an occurance, VBA actually passes a copy of the pointer. So that has the effect of when you change things like properties on the local variable , then the changes are reflected in changes in the original object. (The copy pointer instructs how to change those values, at the actual address held in that pointer). That would normally be the sort of thing you would expect from passing by Ref erence. But as that copy pointer "dies" after the called routine ends, then any changes to the Addresses of the Object Properties in the local variable will not be reflected in the original pointer. So you cannot actually change the pointer.)
Set Wb = ActiveWorkbook ' Set: Fill or partially Fill: Setting to a Class will involve the use of an extra New at this code line. I will then have an Object referred to as an instance of a Class. At this point I include information on my Pointer Pigeon hole for a distinct distinguishable usage of an Object of the Class. For the case of something such as a Workbook this instancing has already been done, and in addition some values are filled in specific memory locations which are also held as part of the information in the Pigeon Hole Pointer. We will have a different Pointer for each instance. In most excel versions we already have a few instances of Worksheets. Such instances Objects can be further used., - For this a Dim to the class will be necessary, but the New must be omitted at Set. I can assign as many variables that I wish to the same existing instance
Dim wsStear As Worksheet ' Used for each Worksheet counting Tabs from left from 1 To Total
Rem 2) varables for some totals ;)
Const TDays As Long = 30 'Total days just taken as 30 ' Long is very simple to handle, - final memory "size" type is known (123.456 and 000.001 have same "size" computer memory ) , and so a Address suggestion can be given for the next line when the variable is filled in. '( Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647) If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.--upon/after 32-bit, Integers (Short) need converted internally anyways, so a Long is actually faster. )
Dim NOHrsV2 As Double, HOHrsV2 As Double ' I am proposing to use the underlying number an adjust as necerssary to get the reqired format
Dim Dte As Date, DteNo As Long ' I am hoping Dte will sort out getting a date in a format that I can use the Weekday function to see what week day it is and get that as a nuumber to check for..
Rem 3) Loop through worksheets and give some Totals
Dim Cnt As Long ' Loop Bound variable count for going through all worksheets
'3a) main Loop start============================================= ========
For Cnt = 1 To Wb.Worksheets.Count ' The Worksheets collection Object Property returns the number of worksheet items in the Workbook
Let NOHrsV2 = 0: Let HOHrsV2 = 0 ' The varaibles are emtied before run for each worksheet
Set wsStear = Wb.Worksheets.Item(Cnt) ' At each loop the variable is set to the current Worksheet counting from the Cnt'ths tab from left
Dim lr As Long ' Used for last row number in column E
Let lr = wsStear.Range("E" & Rows.Count & "").End(xlUp).Row ' The Range Object ( cell ) that is the last cell in the column of interest (CHOOSE a column typically that will always have a last Entry in any Data) ,( Row Number given by .Count Property applied to ( any Worksheet would do, so leaving unqualified is OK here, ) Spreadsheet Range Rows Property) has the Property .End ( argument "Looking back up" ) appled to it. This Returns a new Range ( cell ) object which is that of the first Range ( cell ) with something in it "looking back up" in the XL spreadsheet from that last Cell. Then the .Row Property is applied to return a long number equal to the Row number of that cell: Rows.Count is the very last row number in your Worksheet. It is different for earlier versions of Excel. The End(xlUp) is the same as pressing a Ctrl+UpArrow key combination. The final ".Row" returns the row where the cursor stops after moving up.
Dim FstDtaCel As Range: Set FstDtaCel = wsStear.Range("A1") ' Worksheets Range(" ") Property used to return Range object of first cell in second row
'3b) Data arrays from worksheet. We need columns E H I J .... Date ( Column E ) and Total hrs ( Column H ) are required to use in calculations
Dim arrDte() As Variant, arrTotHrs() As Variant ' In the next lines the .Value2 or .value Property is applied a Range object which presents the Value or Value2 value or values in a single variable of appropriate type or a field of member Elements of varaint types.We are expecting the latter, so declare ( Dim ) a dynamic Array variable appropriately. It must be dynamic as its size will be defined at that assignment
Let arrDte() = FstDtaCel.Offset(0, 4).Resize(lr, 1).Value ' E ' One thing you pick up when learning VBA programming is that referring to cells from one to another via an offset is both fundamental and efficient. That makes sense as Excel is all about using the offsets mentioned above. So like if you use them you can “cut out the middle man”. ( The middle man here might be considered as, for example, in VBA, using extra variables for different Range objects: A fundamental thing to do with any cell ( or strictly speaking the Range object associated to a cell ) is the Range Item Property of any range Object, through which you can “get at” any other Range object. http://www.excelforum.com/showthread.php?t=1154829&page=13&p=4563838&highlight=#post4563838 ( It is often quicker than using a separate variable for each Range object – probably as all the variable does is hold the offset , so you might as well use the offset in the first place.. )
Let arrTotHrs() = FstDtaCel.Offset(0, 7).Resize(lr, 1).Value ' H ' Similarly Another thing you pick up along the way is that the cells ( or strictly speaking the Range objects associated with it ) can be organised into groups of cells which then are also called Range objects and are organised in their constituent parts exactly the same as for the single cell Range object. Once again this is all an indication of organising so that we get at information by sliding along a specific amount ( offset value). The Offset and Resize properties therefore return a new range object. I use the .Value 2 here as i seemed to get it for .Value anyway, not sure why yet, - so i thought be on the safe side , get it always and work somehow with that for now and convert as necerssary. Also 1 breadth Arrays due to Alan Intercept theory are held in such a ways as to be very effient in usage of values within:

Dim arrInNorm() As Variant, arrInOver() As Variant
Let arrInNorm() = FstDtaCel.Offset(0, 8).Resize(lr, 1).Value2 ' I ' Normal Hrs ( Column I ) are needed as they must be set to zero for Holy ?? Holidays ?? Friday ??
Let arrInOver() = FstDtaCel.Offset(0, 9).Resize(lr, 1).Value2 ' J ' Overtime ( Column J ) is needed as it will be changed and then used in calculations
'3c) Inner loop for rows
Dim ShtCnt As Long ' Loop Bound Variable Count for hours columns looping
For ShtCnt = 1 To UBound(arrDte(), 1) Step 1 '------------------- For "rows" in data arrays
'3d) We need to check for a Holy?? Holiday?? Friday?? Adjust columns I and J so that column I has no hours for holiday day and total hours goes to over time hours with criteria 9 or less than 9 hrs all total hours added overtime, 10 or above 10 hrs one hour deducted from total hours and added to column J
Let Dte = arrDte(ShtCnt, 1): Let DteNo = Weekday(Dte, [vbSunday]) ' I do not really nead this extra variable, but for dates I prefer always to do this to help in looking into the variable in Debugging
If DteNo = 6 Then ' 6 I think is Friday, Nelson's Holy HoliDay ?
If (arrTotHrs(ShtCnt, 1) * 24) <= 9 Then '(i) If Total Hrs are less than or equal to 9 ,Then all Total Hrs are added to Overtime Hrs
Let arrInOver(ShtCnt, 1) = arrTotHrs(ShtCnt, 1) ' Given To ' Added to arrInOver(ShtCnt, 1) + arrTotHrs(ShtCnt, 1)
ElseIf (arrTotHrs(ShtCnt, 1) * 24) > 9 Then ' (ii) If Total Hrs are less greater than 9 , Then ( Total Hrs - 1 ) are added to Overtime Hrs
Let arrInOver(ShtCnt, 1) = arrTotHrs(ShtCnt, 1) - 1 / 24 ' Given To ' arrInOver(ShtCnt, 1) + arrTotHrs(ShtCnt, 1) - 1 / 24 'Added to 1 hr less overtime for more than 9 hrs worked
End If
Let arrInNorm(ShtCnt, 1) = Empty ' (iii) As array is variant type can empty Remove normal Hrs Array for(Column I) is then set tom zerow for this "row"o
Else ' No Holy Holiday
End If
'3e)
If arrInNorm(ShtCnt, 1) <> 0 And arrInOver(ShtCnt, 1) <> 0 Then Let NOHrsV2 = NOHrsV2 + arrInOver(ShtCnt, 1) ' Normal Overtime is simply calculated from summing hours in column J only If there are Overtime hours in column J And there are Normal hours are in column I.
If arrInNorm(ShtCnt, 1) = Empty And arrInOver(ShtCnt, 1) <> 0 Then Let HOHrsV2 = HOHrsV2 + arrInOver(ShtCnt, 1) ' Holiday Overtime is simply calculated from summing hours in column J only If there are Overtime hours in column J And there are no Normal hours are in column I.
Next ShtCnt '--------------------------End Inner loop for rows-----
'3f) Paste out final Totals and days to current Worksheet
Let wsStear.Range("G34").Value = NOHrsV2 * 24 'Normal Overtime is held in Array as fraction of a day
Let wsStear.Range("J34").Value = HOHrsV2 * 24 'Holiday Overtime is held in Array as fraction of a day
Let wsStear.Range("C34").Value = TDays ' The constant value of Total days is simply added to cell C34
'3g) Normal Hrs ( Column I ) and Overtime Hrs ( Column J ) are changed
Let FstDtaCel.Offset(0, 9).Resize(lr, 1).Value2 = arrInOver() ' J ' The required spreadsheet cells range has its Range Object .Value2 values filled an allowed direct assignment to an array of values
Let FstDtaCel.Offset(0, 8).Resize(lr, 1).Value2 = arrInNorm() ' I
Next Cnt '==End main Loop==============================================
End Sub


' Rem Ref '_- http://www.excelfox.com/forum/showthread.php/2145-Excel-VBA-Interception-and-Implicit-Intersection-and-VLookUp?p=10062#post10062
'_- http://www.excelfox.com/forum/showthread.php/2138-Understanding-VBA-Range-Object-Properties-and-referring-to-ranges-and-spreadsheet-cells?p=10012#post10012

DocAElstein
02-05-2017, 07:02 PM
Second Code for nelson
Post 9
http://www.excelfox.com/forum/showthread.php/2144-Code-Required-to-calculate-number-of-days-worked-normal-overtime-and-holiday-overtime?p=10070#post10070






Sub IJAdjustKAddTotalAllWorksheet() ' http://www.excelfox.com/forum/showthread.php/2144-Code-Required-to-calculate-number-of-days-worked-normal-overtime-and-holiday-overtime?p=10060#post10060
Rem 1) Workbooks Info.
Dim Wb As Workbook ' Dim: For Object variabls: Address location to a "pointer". That has all the actual memory locations (addresses) of the various property values , and it holds all the instructions what / how to change them , should that be wanted later. That helped explain what occurs when passing an Object to a Call ed Fucntion or Sub Routine By Val ue. In such an occurance, VBA actually passes a copy of the pointer. So that has the effect of when you change things like properties on the local variable , then the changes are reflected in changes in the original object. (The copy pointer instructs how to change those values, at the actual address held in that pointer). That would normally be the sort of thing you would expect from passing by Ref erence. But as that copy pointer "dies" after the called routine ends, then any changes to the Addresses of the Object Properties in the local variable will not be reflected in the original pointer. So you cannot actually change the pointer.)
Set Wb = ActiveWorkbook ' Set: Fill or partially Fill: Setting to a Class will involve the use of an extra New at this code line. I will then have an Object referred to as an instance of a Class. At this point I include information on my Pointer Pigeon hole for a distinct distinguishable usage of an Object of the Class. For the case of something such as a Workbook this instancing has already been done, and in addition some values are filled in specific memory locations which are also held as part of the information in the Pigeon Hole Pointer. We will have a different Pointer for each instance. In most excel versions we already have a few instances of Worksheets. Such instances Objects can be further used., - For this a Dim to the class will be necessary, but the New must be omitted at Set. I can assign as many variables that I wish to the same existing instance
Dim wsStear As Worksheet ' Used for each Worksheet counting Tabs from left from 1 To Total
Rem 2) varables for some totals ;)
Const TDays As Long = 30 'Total days just taken as 30 ' Long is very simple to handle, - final memory "size" type is known (123.456 and 000.001 have same "size" computer memory ) , and so a Address suggestion can be given for the next line when the variable is filled in. '( Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647) If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.--upon/after 32-bit, Integers (Short) need converted internally anyways, so a Long is actually faster. )
Dim Dte As Date, DteNo As Long ' I am hoping Dte will sort out getting a date in a format that I can use the Weekday function to see what week day it is and get that as a nuumber to check for..
Rem 3) Loop through worksheets and give some Totals
Dim Cnt As Long ' Loop Bound variable count for going through all worksheets
'3a) main Loop start============================================= ========
For Cnt = 1 To Wb.Worksheets.Count ' The Worksheets collection Object Property returns the number of worksheet items in the Workbook
Set wsStear = Wb.Worksheets.Item(Cnt) ' At each loop the variable is set to the current Worksheet counting from the Cnt'ths tab from left
Dim lr As Long ' Used for last row number in column E
Let lr = wsStear.Range("E" & Rows.Count & "").End(xlUp).Row ' The Range Object ( cell ) that is the last cell in the column of interest (CHOOSE a column typically that will always have a last Entry in any Data) ,( Row Number given by .Count Property applied to ( any Worksheet would do, so leaving unqualified is OK here, ) Spreadsheet Range Rows Property) has the Property .End ( argument "Looking back up" ) appled to it. This Returns a new Range ( cell ) object which is that of the first Range ( cell ) with something in it "looking back up" in the XL spreadsheet from that last Cell. Then the .Row Property is applied to return a long number equal to the Row number of that cell: Rows.Count is the very last row number in your Worksheet. It is different for earlier versions of Excel. The End(xlUp) is the same as pressing a Ctrl+UpArrow key combination. The final ".Row" returns the row where the cursor stops after moving up.
Dim FstDtaCel As Range: Set FstDtaCel = wsStear.Range("A1") ' Worksheets Range(" ") Property used to return Range object of first cell in second row
'3b) Data arrays from worksheet. We need columns E H I J .... Date ( Column E ) and Total hrs ( Column H ) are required to use in calculations
Dim arrInNorm() As Variant, arrInOver() As Variant ' In the next lines the .Value2 or .value Property is applied a Range object which presents the Value or Value2 value or values in a single variable of appropriate type or a field of member Elements of varaint types.We are expecting the latter, so declare ( Dim ) a dynamic Array variable appropriately. It must be dynamic as its size will be defined at that assignment
Let arrInNorm() = FstDtaCel.Offset(0, 8).Resize(lr, 1).Value2 ' I ' Normal Hrs ( Column I ) are needed as they must be set to zero for Holy ?? Holidays ?? Friday ??
Let arrInOver() = FstDtaCel.Offset(0, 9).Resize(lr, 1).Value2 ' J ' Overtime ( Column J ) is needed as it will be changed and then used in calculations
Dim arrTotHrs() As Variant ' ,' ## ' arrDteClr() As Variant
Let arrTotHrs() = FstDtaCel.Offset(0, 7).Resize(lr, 1).Value ' H ' ' One thing you pick up when learning VBA programming is that referring to cells from one to another via an offset is both fundamental and efficient. That makes sense as Excel is all about using the offsets mentioned above. So like if you use them you can “cut out the middle man”. ( The middle man here might be considered as, for example, in VBA, using extra variables for different Range objects: A fundamental thing to do with any cell ( or strictly speaking the Range object associated to a cell ) is the Range Item Property of any range Object, through which you can “get at” any other Range object. http://www.excelforum.com/showthread.php?t=1154829&page=13&p=4563838&highlight=#post4563838 ( It is often quicker than using a separate variable for each Range object – probably as all the variable does is hold the offset , so you might as well use the offset in the first place.. )
' Similarly Another thing you pick up along the way is that the cells ( or strictly speaking the Range objects associated with it ) can be organised into groups of cells which then are also called Range objects and are organised in their constituent parts exactly the same as for the single cell Range object. Once again this is all an indication of organising so that we get at information by sliding along a specific amount ( offset value). The Offset and Resize properties therefore return a new range object. I use the .Value 2 here as i seemed to get it for .Value anyway, not sure why yet, - so i thought be on the safe side , get it always and work somehow with that for now and convert as necerssary. Also 1 breadth Arrays due to Alan Intercept theory are held in such a ways as to be very effient in usage of values within
Dim arrK() As String 'I know the size, but must make it dynamic as Dim declaration only takes numbers, and so I use ReDim method below wehich can also take variables or formulas
ReDim arrK(1 To UBound(arrInNorm(), 1), 1 To 1) ' Any array first dimension ("row") will do

'This will not work. ' ## ' Let arrDteClr() = FstDtaCel.Offset(0, 4).Resize(lr, 1).Interior.Color ' because .Interior property for a Range object shows only one value for the entire range which seems to be zero unless all the cells have a colour
Dim arrDteClr() As Double, rngDts As Range
Set rngDts = FstDtaCel.Offset(0, 4).Resize(lr, 1)
Dim Rws As Long: ReDim arrDteClr(1 To lr, 1 To 1) ' so must loop in each Interior color value
For Rws = 1 To UBound(arrDteClr(), 1) Step 1 'InnerLoop for dates background colors
Let arrDteClr(Rws, 1) = rngDts.Item(Rws, "A").Interior.Color
Next Rws
'3c) Inner loop for rows
Dim ShtCnt As Long ' Loop Bound Variable Count for hours columns looping
For ShtCnt = 1 To UBound(arrDteClr(), 1) Step 1 '------------------- For "rows" in data arrays
'3d) We need to check Interior color Adjust columns I and J so that column I has no hours for holiday day and total hours goes to over time hours with criteria 9 or less than 9 hrs all total hours added overtime, 10 or above 10 hrs one hour deducted from total hours and added to column J ..... and add a H or N in helper column K
If arrDteClr(ShtCnt, 1) = 65535 Then
If (arrTotHrs(ShtCnt, 1) * 24) <= 9 Then '(i) If Total Hrs are less than or equal to 9 ,Then all Total Hrs are added to Overtime Hrs
Let arrInOver(ShtCnt, 1) = arrTotHrs(ShtCnt, 1) ' Given To ' Added to arrInOver(ShtCnt, 1) + arrTotHrs(ShtCnt, 1)
ElseIf (arrTotHrs(ShtCnt, 1) * 24) > 9 Then ' (ii) If Total Hrs are less greater than 9 , Then ( Total Hrs - 1 ) are added to Overtime Hrs
Let arrInOver(ShtCnt, 1) = arrTotHrs(ShtCnt, 1) - 1 / 24 ' Given To ' arrInOver(ShtCnt, 1) + arrTotHrs(ShtCnt, 1) - 1 / 24 'Added to 1 hr less overtime for more than 9 hrs worked
End If
Let arrInNorm(ShtCnt, 1) = Empty ' (iii) As array is variant type can empty Remove normal Hrs Array for(Column I) is then set tom zerow for this "row"o
Let arrK(ShtCnt, 1) = "H" ' Give string, "" value of H for Holiday in Admin's help column K
Else ' No Holy Holiday
Let arrK(ShtCnt, 1) = "N" ' give string N for normal
End If
'3e) ' from last code, is not now used to calculate totals
Next ShtCnt '--------------------------End Inner loop for rows-----
'3f) Paste out final Totals and days to current Worksheet
Let wsStear.Range("G35").Value = "=SUMIF(K1:K" & lr & ",""N"",J1:J" & lr & ")*24"
Let wsStear.Range("J35").Value = "=SUMIF(K1:K" & lr & ",""H"",J1:J" & lr & ")*24"
Let wsStear.Range("C34").Value = TDays ' The constant value of Total days is simply added to cell C34
'3g) Normal Hrs ( Column I ) and Overtime Hrs ( Column J ) are changed ' And can paste out help column if you like
Let FstDtaCel.Offset(0, 9).Resize(lr, 1).Value2 = arrInOver() ' J ' The required spreadsheet cells range has its Range Object .Value2 values filled an allowed direct assignment to an array of values
Let FstDtaCel.Offset(0, 8).Resize(lr, 1).Value2 = arrInNorm() ' I
Let FstDtaCel.Offset(0, 10).Resize(lr, 1).Value2 = arrK() ' K
Next Cnt '==End main Loop==============================================
End Sub

DocAElstein
02-09-2017, 02:39 PM
'Testies: NOT FINAL CODE --- TEST CODE FOR LATER REFERRENCE ! TEST ! --- Testies to you '_-
' Code for approximately Posts: 14 - 23
Sub IJAdjustLAddTotalAllWorksheetCode3()

For Thread ' http://www.excelfox.com/forum/showthread.php/2144-Code-Required-to-calculate-number-of-days-worked-normal-overtime-and-holiday-overtime?p=10078#post10078


'Testies: NOT FINAL CODE --- TEST CODE FOR LATER REFERRENCE ! TEST ! --- Testies to you '_-
' Code for approximately Posts: 14 - 23
Sub IJAdjustLAddTotalAllWorksheetCode3() 'http://www.excelfox.com/forum/showthread.php/2144-Code-Required-to-calculate-number-of-days-worked-normal-overtime-and-holiday-overtime?p=10078#post10078
Rem 1) Workbooks Info.
Dim Wb As Workbook ' Dim: For Object variabls: Address location to a "pointer". That has all the actual memory locations (addresses) of the various property values , and it holds all the instructions what / how to change them , should that be wanted later. That helped explain what occurs when passing an Object to a Call ed Fucntion or Sub Routine By Val ue. In such an occurance, VBA actually passes a copy of the pointer. So that has the effect of when you change things like properties on the local variable , then the changes are reflected in changes in the original object. (The copy pointer instructs how to change those values, at the actual address held in that pointer). That would normally be the sort of thing you would expect from passing by Ref erence. But as that copy pointer "dies" after the called routine ends, then any changes to the Addresses of the Object Properties in the local variable will not be reflected in the original pointer. So you cannot actually change the pointer.)
Set Wb = ActiveWorkbook ' Set: Fill or partially Fill: Setting to a Class will involve the use of an extra New at this code line. I will then have an Object referred to as an instance of a Class. At this point I include information on my Pointer Pigeon hole for a distinct distinguishable usage of an Object of the Class. For the case of something such as a Workbook this instancing has already been done, and in addition some values are filled in specific memory locations which are also held as part of the information in the Pigeon Hole Pointer. We will have a different Pointer for each instance. In most excel versions we already have a few instances of Worksheets. Such instances Objects can be further used., - For this a Dim to the class will be necessary, but the New must be omitted at Set. I can assign as many variables that I wish to the same existing instance
Dim wsStear As Worksheet ' Used for each Worksheet counting Tabs from left from 1 To Total
Rem 2) varables for some totals ;)
'Const TDays As Long = 30 'Total days just taken as 30 ' Long is very simple to handle, - final memory "size" type is known (123.456 and 000.001 have same "size" computer memory ) , and so a Address suggestion can be given for the next line when the variable is filled in. '( Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647) If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.--upon/after 32-bit, Integers (Short) need converted internally anyways, so a Long is actually faster. )
Dim Dte As Date, DteNo As Long ' I am hoping Dte will sort out getting a date in a format that I can use the Weekday function to see what week day it is and get that as a nuumber to check for..
Rem 3) Loop through worksheets and give some Totals
Dim Cnt As Long ' Loop Bound variable count for going through all worksheets
'3a) main Loop start============================================= ========
For Cnt = 1 To Wb.Worksheets.Count ' The Worksheets collection Object Property returns the number of worksheet items in the Workbook
Set wsStear = Wb.Worksheets.Item(Cnt) ' At each loop the variable is set to the current Worksheet counting from the Cnt'ths tab from left
Dim lr As Long ' Used for last row number in column E
Let lr = wsStear.Range("E" & Rows.Count & "").End(xlUp).Row ' The Range Object ( cell ) that is the last cell in the column of interest (CHOOSE a column typically that will always have a last Entry in any Data) ,( Row Number given by .Count Property applied to ( any Worksheet would do, so leaving unqualified is OK here, ) Spreadsheet Range Rows Property) has the Property .End ( argument "Looking back up" ) appled to it. This Returns a new Range ( cell ) object which is that of the first Range ( cell ) with something in it "looking back up" in the XL spreadsheet from that last Cell. Then the .Row Property is applied to return a long number equal to the Row number of that cell: Rows.Count is the very last row number in your Worksheet. It is different for earlier versions of Excel. The End(xlUp) is the same as pressing a Ctrl+UpArrow key combination. The final ".Row" returns the row where the cursor stops after moving up.
Let lr = 30 ' maybe nelson means thís ? "...For all Month no. of days we take as 30 only..."
Dim FstDtaCel As Range: Set FstDtaCel = wsStear.Range("A1") ' Worksheets Range(" ") Property used to return Range object of first cell in second row
'3b) Data arrays from worksheet. We need columns E H I J .... Date ( Column E ) and Total hrs ( Column H ) are required to use in calculations
Dim arrInNorm() As Variant, arrInOver() As Variant ' In the next lines the .Value2 or .value Property is applied a Range object which presents the Value or Value2 value or values in a single variable of appropriate type or a field of member Elements of varaint types.We are expecting the latter, so declare ( Dim ) a dynamic Array variable appropriately. It must be dynamic as its size will be defined at that assignment
Let arrInNorm() = FstDtaCel.Offset(0, 8).Resize(lr, 1).Value2 ' I ' Normal Hrs ( Column I ) are needed as they must be set to zero for Holy ?? Holidays ?? Friday ??
Let arrInOver() = FstDtaCel.Offset(0, 9).Resize(lr, 1).Value2 ' J ' Overtime ( Column J ) is needed as it will be changed and then used in calculations
Dim arrTotHrs() As Variant ' ,' ## ' arrDteClr() As Variant
Let arrTotHrs() = FstDtaCel.Offset(0, 7).Resize(lr, 1).Value ' H ' ' One thing you pick up when learning VBA programming is that referring to cells from one to another via an offset is both fundamental and efficient. That makes sense as Excel is all about using the offsets mentioned above. So like if you use them you can “cut out the middle man”. ( The middle man here might be considered as, for example, in VBA, using extra variables for different Range objects: A fundamental thing to do with any cell ( or strictly speaking the Range object associated to a cell ) is the Range Item Property of any range Object, through which you can “get at” any other Range object. http://www.excelforum.com/showthread.php?t=1154829&page=13&p=4563838&highlight=#post4563838 ( It is often quicker than using a separate variable for each Range object – probably as all the variable does is hold the offset , so you might as well use the offset in the first place.. )
' Similarly Another thing you pick up along the way is that the cells ( or strictly speaking the Range objects associated with it ) can be organised into groups of cells which then are also called Range objects and are organised in their constituent parts exactly the same as for the single cell Range object. Once again this is all an indication of organising so that we get at information by sliding along a specific amount ( offset value). The Offset and Resize properties therefore return a new range object. I use the .Value 2 here as i seemed to get it for .Value anyway, not sure why yet, - so i thought be on the safe side , get it always and work somehow with that for now and convert as necerssary. Also 1 breadth Arrays due to Alan Intercept theory are held in such a ways as to be very effient in usage of values within
Dim arrL() As String 'I know the size, but must make it dynamic as Dim declaration only takes numbers, and so I use ReDim method below wehich can also take variables or formulas
ReDim arrL(1 To UBound(arrInNorm(), 1), 1 To 1) ' Any array first dimension ("row") will do
Dim arrAbscentK() As String 'K column to have ABSCENT in for person Abscent on not Holiday
ReDim arrAbscentK(1 To UBound(arrInNorm(), 1), 1 To 1)
'Must Loop to get interior color as this will not work. ' ## ' Let arrDteClr() = FstDtaCel.Offset(0, 4).Resize(lr, 1).Interior.Color ' because .Interior property for a Range object shows only one value for the entire range which seems to be zero unless all the cells have a colour
Dim arrDteClr() As Double, rngDts As Range
Set rngDts = FstDtaCel.Offset(0, 4).Resize(lr, 1)
Dim Rws As Long: ReDim arrDteClr(1 To lr, 1 To 1) ' so must loop in each Interior color value
For Rws = 1 To UBound(arrDteClr(), 1) Step 1 'InnerLoop for dates background colors
Let arrDteClr(Rws, 1) = rngDts.Item(Rws, "A").Interior.Color
Next Rws
'3c) Inner loop for rows
Dim ShtCnt As Long ' Loop Bound Variable Count for hours columns looping
Dim ValidHoliday As Boolean: Let ValidHoliday = True 'Assume for now Holiday days are valid for Holiday adjustments
For ShtCnt = 1 To UBound(arrDteClr(), 1) Step 1 '------------------- For "rows" in data arrays
'3d) We need to check Interior color, and a few other things, Adjust columns I and J so that column I has no hours for holiday day and total hours goes to over time hours with criteria 9 or less than 9 hrs all total hours added overtime, 10 or above 10 hrs one hour deducted from total hours and added to column J ..... and add a H or N in helper column K
If arrDteClr(ShtCnt, 1) = 65535 Then ' We have a Holiday, ...but... have some other checks
If Not (ShtCnt = 1 Or ShtCnt = UBound(arrDteClr(), 1)) Then ' ....but... Possible futher checks for not adjusting Normal Total Hrs to overtime and remove normal Hrs
'It is possible to check for absent before and after current day
If (arrTotHrs(ShtCnt - 1, 1) <> Empty And arrTotHrs(ShtCnt + 1, 1)) <> Empty Then '...."...holiday is deducted if the person does not come the day before and after the holiday..."....
Let ValidHoliday = False
Else
Let ValidHoliday = True
End If
Else 'It is not possible for absence before AND after to check for absence as one will lie in last or next month
End If ' We remmain at default or last set true or just set true
'We had Holiday ...
If ValidHoliday = True Then ' ...and all conditions for valid Holiday pay adjustments
'Conditions met to adjust make all of 1 less of Normal Hrs to overtime
If (arrTotHrs(ShtCnt, 1) * 24) <= 9 Then '(i) If Total Hrs are less than or equal to 9 ,Then all Total Hrs are added to Overtime Hrs
Let arrInOver(ShtCnt, 1) = arrTotHrs(ShtCnt, 1) ' Given To ' Added to arrInOver(ShtCnt, 1) + arrTotHrs(ShtCnt, 1)
ElseIf (arrTotHrs(ShtCnt, 1) * 24) > 9 Then ' (ii) If Total Hrs are less greater than 9 , Then ( Total Hrs - 1 ) are added to Overtime Hrs
Let arrInOver(ShtCnt, 1) = arrTotHrs(ShtCnt, 1) - 1 / 24 ' Given To ' arrInOver(ShtCnt, 1) + arrTotHrs(ShtCnt, 1) - 1 / 24 'Added to 1 hr less overtime for more than 9 hrs worked
End If
Let arrInNorm(ShtCnt, 1) = Empty ' (iii) As array is variant type can empty Remove normal Hrs Array for(Column I) is then set tom zerow for this "row"o
Let arrL(ShtCnt, 1) = "H" ' ' (iv)H Give string, "" value of H for Holiday in Admin's help column
Else ' We had a Holiday but abscence before and after, we need
Let ValidHoliday = True 'we need to reset to true
End If
Else ' No Holy Holiday
Let arrL(ShtCnt, 1) = "N" ' give string N for normal ' (iv)N
End If
If arrTotHrs(ShtCnt, 1) = Empty And Not arrDteClr(ShtCnt, 1) = 65535 Then Let arrAbscentK(ShtCnt, 1) = "ABSENT" ' column K absent days should be marked as ABSENT.
'3e) ' from last code, is not now used to calculate totals
Next ShtCnt '--------------------------End Inner loop for rows-----
'3f) Paste out final Totals and days to current Worksheet
Let wsStear.Range("G34").Value = "=SUMIF(L1:L" & lr & ",""N"",J1:J" & lr & ")*24"
Let wsStear.Range("J34").Value = "=SUMIF(L1:L" & lr & ",""H"",J1:J" & lr & ")*24"
Let wsStear.Range("C34").Value = "=COUNT(F1:F31)" ' TDays ' The constant value of Total days is simply added to cell C34
'3g) Normal Hrs ( Column I ) and Overtime Hrs ( Column J ) are changed ' And can paste out help column if you like
Let FstDtaCel.Offset(0, 9).Resize(lr, 1).Value2 = arrInOver() ' J ' The required spreadsheet cells range has its Range Object .Value2 values filled an allowed direct assignment to an array of values
Let FstDtaCel.Offset(0, 8).Resize(lr, 1).Value2 = arrInNorm() ' I
Let FstDtaCel.Offset(0, 11).Resize(lr, 1).Value2 = arrL() ' L
Let FstDtaCel.Offset(0, 10).Resize(lr, 1).Value2 = arrAbscentK() ' K
'3h) Set Booleans for
Next Cnt '==End main Loop==============================================
End Sub

DocAElstein
03-23-2018, 12:48 PM
Table of final results for solution to this Thread:
http://www.excelfox.com/forum/showthread.php/2238-Copy-data-from-Unique-files-into-Masterfile-all-the-files-in-the-same-folder?p=10548#post10548
Using Excel 2007 32 bit


S No
Item
Price
Qty
Total
Date Distributed
Task1
Task2
Task3
Task4
Date Tasks Completed
Date Consolidated
Comments
Team Member


1A1
$ 25.00
7
$ 175.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
22.Mrz 18Raghu


2A5
$ 95.00
52
$ 4,940.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
22.Mrz 18Raghu


3B1
$ 985.00
65
$ 64,025.00
17. Mrz 18Raghu


4B5
$ 85.00
7
$ 595.00
18. Mrz 18DoneN/ADoneN/A
18.Mrz 18
22.Mrz 18Raghu


5C1
$ 41.00
52
$ 2,132.00
18. Mrz 18N/ADoneN/ADone
18.Mrz 18
22.Mrz 18Raghu


6C5
$ 655.00
65
$ 42,575.00
20. Mrz 18DoneN/ADoneN/A
20.Mrz 18
22.Mrz 18Raghu


7D1
$ 1,258.00
7
$ 8,806.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18
22.Mrz 18Raghu


8D5
$ 44.00
52
$ 2,288.00
22. Mrz 18Raghu


9D10
$ 55.00
22
$ 1,210.00
22. Mrz 18N/ADoneN/ADone
22.Mrz 18
22.Mrz 18Raghu


10A3
$ 22.00
9
$ 198.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18Raju


11A7
$ 11.00
12
$ 132.00
17. Mrz 18Raju


12B3
$ 223.00
85
$ 18,955.00
17. Mrz 18N/ADoneN/ADone
17.Mrz 18Raju


13B7
$ 63.00
9
$ 567.00
18. Mrz 18DoneN/ADoneN/A
18.Mrz 18Raju


14C3
$ 96.00
12
$ 1,152.00
18. Mrz 18N/ADoneN/ADone
18.Mrz 18Raju


15C7
$ 11.00
85
$ 935.00
20. Mrz 18DoneN/ADoneN/A
20.Mrz 18Raju


16D3
$ 332.00
9
$ 2,988.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18Raju


17D7
$ 566.00
12
$ 6,792.00
22. Mrz 18DoneN/ADoneN/A
22.Mrz 18Raju


18A4
$ 45.00
41
$ 1,845.00
17. Mrz 18Ramesh


19A8
$ 36.00
32
$ 1,152.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18Ramesh


20B4
$ 41.00
96
$ 3,936.00
17. Mrz 18N/ADoneN/ADone
17.Mrz 18Ramesh


21B8
$ 52.00
41
$ 2,132.00
18. Mrz 18DoneN/ADoneN/A
18.Mrz 18Ramesh


22C4
$ 85.00
32
$ 2,720.00
18. Mrz 18N/ADoneN/ADone
18.Mrz 18Ramesh


23C8
$ 458.00
96
$ 43,968.00
20. Mrz 18DoneN/ADoneN/A
20.Mrz 18Ramesh


24D4
$ 22.00
41
$ 902.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18Ramesh


25D8
$ 332.00
32
$ 10,624.00
22. Mrz 18DoneN/ADoneN/A
22.Mrz 18Ramesh


26A2
$ 35.00
8
$ 280.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18Ravi


27A6
$ 78.00
63
$ 4,914.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18Ravi


28B2
$ 11.00
47
$ 517.00
17. Mrz 18N/ADoneN/ADone
17.Mrz 18Ravi


29B6
$ 96.00
8
$ 768.00
18. Mrz 18Ravi


30C2
$ 74.00
63
$ 4,662.00
18. Mrz 18Ravi


31C6
$ 365.00
47
$ 17,155.00
20. Mrz 18Ravi


32D2
$ 33.00
8
$ 264.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18Ravi


33D6
$ 55.00
63
$ 3,465.00
22. Mrz 18DoneN/ADoneN/A
22.Mrz 18Ravi


34A9
$ 12.00
65
$ 780.00
22. Mrz 18Sangeeta


35B9
$ 45.00
47
$ 2,115.00
22. Mrz 18DoneN/ADoneN/A
21.Mrz 18Sangeeta


36C9
$ 56.00
85
$ 4,760.00
22. Mrz 18N/ADoneN/ADone
21.Mrz 18Sangeeta


37D9
$ 89.00
96
$ 8,544.00
22. Mrz 18DoneN/ADoneN/A
21.Mrz 18Sangeeta


38A10
$ 25.00
3
$ 75.00
22. Mrz 18N/ADoneN/ADone
21.Mrz 18Sangeeta
Worksheet: Sheet1

DocAElstein
03-24-2018, 02:17 PM
Final Results for this Thread Post
http://www.excelfox.com/forum/showthread.php/2238-Copy-data-from-Unique-files-into-Masterfile-all-the-files-in-the-same-folder?p=10575#post10575



S No
Item
Price
Qty
Total
Date Distributed
Task1
Task2
Task3
Task4
Date Tasks Completed
Date Consolidated
Comments
Team Member


1A1
$ 25.00
7
$ 175.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
24.Mrz 18Raghu


2A5
$ 95.00
52
$ 4,940.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
24.Mrz 18Raghu


3B1
$ 985.00
65
$ 64,025.00
17. Mrz 18Raghu


4B5
$ 85.00
7
$ 595.00
18. Mrz 18DoneN/ADoneN/A
18.Mrz 18
24.Mrz 18Raghu


5C1
$ 41.00
52
$ 2,132.00
18. Mrz 18N/ADoneN/ADone
18.Mrz 18
24.Mrz 18Raghu


6C5
$ 655.00
65
$ 42,575.00
20. Mrz 18DoneN/ADoneN/A
20.Mrz 18
24.Mrz 18Raghu


7D1
$ 1,258.00
7
$ 8,806.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18
24.Mrz 18Raghu


8D5
$ 44.00
52
$ 2,288.00
22. Mrz 18Raghu


9D10
$ 55.00
22
$ 1,210.00
22. Mrz 18N/ADoneN/ADone
22.Mrz 18
24.Mrz 18Raghu


10A3
$ 22.00
9
$ 198.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
24.Mrz 18Raju


11A7
$ 11.00
12
$ 132.00
17. Mrz 18Raju


12B3
$ 223.00
85
$ 18,955.00
17. Mrz 18N/ADoneN/ADone
17.Mrz 18
24.Mrz 18Raju


13B7
$ 63.00
9
$ 567.00
18. Mrz 18DoneN/ADoneN/A
18.Mrz 18
24.Mrz 18Raju


14C3
$ 96.00
12
$ 1,152.00
18. Mrz 18N/ADoneN/ADone
18.Mrz 18
24.Mrz 18Raju


15C7
$ 11.00
85
$ 935.00
20. Mrz 18DoneN/ADoneN/A
20.Mrz 18
24.Mrz 18Raju


16D3
$ 332.00
9
$ 2,988.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18
24.Mrz 18Raju


17D7
$ 566.00
12
$ 6,792.00
22. Mrz 18DoneN/ADoneN/A
22.Mrz 18
24.Mrz 18Raju


18A4
$ 45.00
41
$ 1,845.00
17. Mrz 18Ramesh


19A8
$ 36.00
32
$ 1,152.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
24.Mrz 18Ramesh


20B4
$ 41.00
96
$ 3,936.00
17. Mrz 18N/ADoneN/ADone
17.Mrz 18
24.Mrz 18Ramesh


21B8
$ 52.00
41
$ 2,132.00
18. Mrz 18DoneN/ADoneN/A
18.Mrz 18
24.Mrz 18Ramesh


22C4
$ 85.00
32
$ 2,720.00
18. Mrz 18N/ADoneN/ADone
18.Mrz 18
24.Mrz 18Ramesh


23C8
$ 458.00
96
$ 43,968.00
20. Mrz 18DoneN/ADoneN/A
20.Mrz 18
24.Mrz 18Ramesh


24D4
$ 22.00
41
$ 902.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18
24.Mrz 18Ramesh


25D8
$ 332.00
32
$ 10,624.00
22. Mrz 18DoneN/ADoneN/A
22.Mrz 18
24.Mrz 18Ramesh


26A2
$ 35.00
8
$ 280.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
24.Mrz 18Ravi


27A6
$ 78.00
63
$ 4,914.00
17. Mrz 18DoneN/ADoneN/A
17.Mrz 18
24.Mrz 18Ravi


28B2
$ 11.00
47
$ 517.00
17. Mrz 18N/ADoneN/ADone
17.Mrz 18
24.Mrz 18Ravi


29B6
$ 96.00
8
$ 768.00
18. Mrz 18Ravi


30C2
$ 74.00
63
$ 4,662.00
18. Mrz 18Ravi


31C6
$ 365.00
47
$ 17,155.00
20. Mrz 18Ravi


32D2
$ 33.00
8
$ 264.00
20. Mrz 18N/ADoneN/ADone
20.Mrz 18
24.Mrz 18Ravi


33D6
$ 55.00
63
$ 3,465.00
22. Mrz 18DoneN/ADoneN/A
22.Mrz 18
24.Mrz 18Ravi


34A9
$ 12.00
65
$ 780.00
22. Mrz 18Sangeeta


35B9
$ 45.00
47
$ 2,115.00
22. Mrz 18DoneN/ADoneN/A
21.Mrz 18
24.Mrz 18Sangeeta


36C9
$ 56.00
85
$ 4,760.00
22. Mrz 18N/ADoneN/ADone
21.Mrz 18
24.Mrz 18Sangeeta


37D9
$ 89.00
96
$ 8,544.00
22. Mrz 18DoneN/ADoneN/A
21.Mrz 18
24.Mrz 18Sangeeta


38A10
$ 25.00
3
$ 75.00
22. Mrz 18N/ADoneN/ADone
21.Mrz 18
24.Mrz 18Sangeeta
Worksheet: Sheet1

DocAElstein
03-24-2018, 02:49 PM
Code for last post

Sub Raghavendra2b() 'http://www.excelfox.com/forum/showthread.php/2238-Copy-data-from-Unique-files-into-Masterfile-all-the-files-in-the-same-folder?p=10575#post10575
Dim LisWb As Workbook
Set LisWb = ThisWorkbook
Dim Ws2 As Worksheet, Ws1 As Worksheet
Set Ws2 = LisWb.Worksheets.Item(2): Set Ws1 = LisWb.Worksheets.Item(1):
Dim strWb As String: Let strWb = Dir(ThisWorkbook.Path & "\" & "*" & ".xlsx", vbNormal)
Do ' Loop through all .xlsx Files in same Folder as this workbook
Workbooks.Open Filename:=ThisWorkbook.Path & Application.PathSeparator & strWb
Let Ws2.Range("A2:A1000").Value = "=" & "'" & ThisWorkbook.Path & "\[" & strWb & "]Sheet1'!$A2"
Dim Lr As Long
Let Lr = Ws2.Range("A2:A1000").Find(what:=0, after:=Ws2.Range("A2"), LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext).Row - 1
Let Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Value = "=" & "'" & ThisWorkbook.Path & "\[" & strWb & "]Sheet1'!G2"
Let Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Value = Ws1.Evaluate("=IF(ISERR(" & Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Address & ")," & """""" & ",IF(" & Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Address & "=0," & """""" & "," & Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Address & "))")
'Let Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Value = Evaluate("=IF(ISERR(" & Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Address & ")," & Empty & ",IF(" & Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Address & "=0," & Empty & "," & Ws1.Range("G" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Address & "))") ' Does not remove the 0s ??
Let Ws1.Range("K" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").NumberFormat = "d.mmm yy"
Let Ws1.Range("K" & Ws2.Range("A2").Value + 1 & ":K" & Ws2.Range("A" & Lr & "").Value + 1 & "").SpecialCells(xlCellTypeConstants, xlNumbers).Offset(, 1).Value = Format(Date, "dd mmm yyyy") ' Put current date in cells 1 column to the left of cells in K column that have dates in
Let Workbooks("" & strWb & "").Worksheets.Item(1).Range("L2:L" & Lr & "").Value = Ws1.Range("L" & Ws2.Range("A2").Value + 1 & ":L" & Ws2.Range("A" & Lr & "").Value + 1 & "").Value ' Date values pasted in in last code line are given to correspondin cells in current open data workbook, first worksheet
Let Workbooks("" & strWb & "").Worksheets.Item(1).Range("L2:L" & Lr & "").NumberFormat = "d.mmm yy"
Workbooks("" & strWb & "").Close SaveChanges:=True
Let strWb = Dir
Loop While strWb <> ""
End Sub

DocAElstein
03-28-2018, 12:48 AM
Code in support of these Threads:
http://www.excelfox.com/forum/showthread.php/2146-%E0%A4%AC%E0%A5%8D%E0%A4%B2%E0%A5%89%E0%A4%97-%E0%A4%95%E0%A5%8B%E0%A4%B6%E0%A4%BF%E0%A4%B6-%E0%A4%95%E0%A4%B0-%E0%A4%B0%E0%A4%B9%E0%A4%BE-%E0%A4%B9%E0%A5%88-%D8%A8%D9%84%D8%A7%DA%AF%D8%B2-%DA%A9%DB%8C-%DA%A9*Trying-Blogs?p=10582#post10582


What code does in General:
This code will search for specific text in a text file
What code does in Specifically:
The code assumes that you have a simple text file looking something like this:
TextRowsInTextFile.jpg : https://imgur.com/upBY709
2031
HotFixID
{EF8CD7FC-438D-49E3-A2C7-201052D9F2EF}
{8D2CDFAB-0079-43CC-A289-2F7A67F0A4DE}
{98D8F490-1F42-4F29-A59B-BF96D23A11BA}
{B730F010-3FCF-4E80-8A5A-C1DBEC0CF55A}
{B73E5AF4-40C6-4EA9-8F57-CFA70CC72BD6}
{BF11577A-6876-45AA-86C9-2BA4CFB8B019}
{E359D786-B101-4545-B8AB-8652323CF3CA}
{F4139440-5426-4C6F-909B-F71CEB1071B1}
{B2FAD7E1-67F9-435D-98BD-A77DBF4E1381}


Here is the example text file used in this explanation and currently hard coded into the code : “UpdatesOnVistaAspire4810TZG25thMarch.txt” : https://app.box.com/s/z90o8yj7iz0188yci34mu7gahe2tfhce

You can input , when prompted, a text string or text strings to look for. For more than one text string you should separate them by at least one space, like
__ B23 ___6872 35689
( The code below has those actual strings hard coded as the default search values )
Input Box Functioning.jpg : https://imgur.com/o9wlnhK https://imgur.com/JtnTDmy
2030 2034

The code will look for those text strings in all text file lines except the first.
( there is also a section to check the content of the first line, but it is 'commented out in the code below )
The code searches for those lines which contain any of those strings. In this demo example, one thing that I would be looking for is the rows in the text file containing B23 in them, so that would be the middle few in this screenshot .. B23 TextRowsInTextFile.JPG : https://imgur.com/JHRqJJc
2032

The final result of the codes is to give you a string message which has a list of the text strings that you were looking for, and a list of the full text in any rows which contained that. The string is displayed in a message box. In addition if you are in the VB Editor Window and hit Ctrl+g , the you will see the results also in the immediate window. This latter has the advantage that you can copy the data to the clipboard by highlighting it and hitting Ctrl+c , ( or alternatively select the text and select the option to copy available via right mouse click ) : YouLookedForFindedWas.JPG: https://imgur.com/tyW4HSJ
2033

Here is the code. It should be pasted into any File which is in the same Folder as the text file you want to search through. Currently the code is hard coded to search the file with name
“UpdatesOnVistaAspire4810TZG25thMarch.txt”
So you will need to change that to suit your text file name.



Sub CheqUpDates()
On Error GoTo GetLaid ' Instruction to replace / modify VBA default error handler by hanging on to the arousal this code starting from the labelled label code area
Rem 1) ActiviaExcretionLink, AEL. Checking Object link mechanismus
'1a) Exposing of interfaces for active RunableTimed data axctivated link
Dim ActiviEL As String ' "Pointer" to a "Blue Print" (or Form, Questionnaire not yet filled in, a template etc.)"Pigeon Hole" in Memory, sufficient in construction to house a piece of Paper with code text giving the relevant information for the particular Variable Type. VBA is sent to it when it passes it. In a Routine it may be given a particular “Value”, or (“Values” for Objects). There instructions say then how to do that and handle(store) that(those). At Dim the created Paper is like a Blue Print that has some empty spaces not yet filled in. A String is a bit tricky. The Blue Print code line Paper in the Pigeon Hole will allow to note the string Length and an Initial start memory Location. This Location well have to change frequently as strings of different length are assigned. Instructions will tell how to do this. Theoretically a special value vbNullString is set to aid in quick checks.. But..http://www.mrexcel.com/forum/excel-questions/361246-vbnullstring-2.html#post44116
Let ActiviEL = ThisWorkbook.Path & "\UpdatesOnVistaAspire4810TZG25thMarch.txt" 'Will be referrenced in code through an opened "route" to it
Dim LedgerFreiNummer As String: Let LedgerFreiNummer = "1" & "00" ' Not required in this code : https://www.excelforum.com/excel-general/1225401-value-of-true-1-or-1-vba-vs-worksheet.html
Dim AEL_Highway As Long: Let AEL_Highway = FreeFile("" & LedgerFreiNummer & "") ' Obtain from 2nd building phase (256-511) Ledger of available Highways, coercidentally to value 1_255 likely , bits of my 1 & 00
Rem 2) text file info
' '2a) Open File read first line check the sht - want Head
' Open ActiviEL For Input As AEL_Highway '
' Dim ShtHead As String
' Line Input #AEL_Highway, ShtHead ' Check substancialating for getting good Head
' If InStr(1, ShtHead, "HotFix", vbTextCompare) = 0 Then
' MsgBox prompt:="Got no HotFix IDin " & ShtHead
' Exit Sub
' Else
' Debug.Print ShtHead
' End If
' Close AEL_Highway ' Datei scheißen
'2b) "row" count in text file
Dim RecardRows As Long ' '_-' Long is very simple to handle, - final memory "size" type is known (123.456 and 000.001 have same "size" computer memory ) , and so a Address suggestion can be given for the next line when the variable is filled in. '( Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647) If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.--upon/after 32-bit, Integers (Short) need converted internally anyways, so a Long is actually faster. ) https://www.mrexcel.com/forum/excel-questions/803662-byte-backward-loop-4.html
Let RecardRows = 0
Dim strLine As String
Open ActiviEL For Input As AEL_Highway ' Activated embedded Link objectimocom Binary as to referencingmocomed aka AliAs AEL_Highway opened of now
Do Until EOF(AEL_Highway) 'Looping all lines in text file ' Solange bis Datei-Ende - EOF(AEL_Highway) will be set to true by the last a carriage liney mo not found a next line in Line Input #AEL_Highway, strLine
Line Input #AEL_Highway, strLine: Let RecardRows = RecardRows + 1 ' Inputed der liney mo a carriage returned after then record register count of it to that increase by the one done liney mo
Loop 'Do Until EOF(AEL_Highway) 'Looping all lines in text file
'Let RecardRows = RecardRows + 1 'would need to do this if I did not closeat '2a) and reopen in '2b)
Close AEL_Highway ' Datei scheißen - scheise drauf der Highway geschnmut - no longer activamoed AEL not activia mated mo
Rem 3) Prepare output Array for all text File data
Dim arrOut() As String: ReDim arrOut(1 To RecardRows) ' can declare to known size and type. We cannot use Dim arrOut(1 to RecardRows) as pre complie compile cannot do the RecardRows is not available: method ReDim is Runtime
Rem 4) Main loop for filling in Output Data =============================================
Open ActiviEL For Input As AEL_Highway
Dim RecardRow As Long ', strLine As String
For RecardRow = 1 To RecardRows '(Do Until EOF(AEL_Highway) 'Looping all lines in text file)
Line Input #AEL_Highway, strLine: Let arrOut(RecardRow) = strLine ' Zeile lesen - as before but this time place in element of output array
Next RecardRow ' ===== (Do Until EOF(AEL_Highway) 'Looping all lines in text file)===
Close AEL_Highway ' Datei schließen

Rem 5) search for specific strings
'5a) Bring in text or texts to be searched for, reduce multiple spaces to single spaces between if more than one given and, and split into array of those individual text strings https://powerspreadsheets.com/excel-vba-inputbox/ http://www.excelfox.com/forum/showthread.php/2227-VBA-Input-Pop-up-Boxes-Application-InputBox-Method-versus-VBA-InputBox-Function?p=10462#post10462
Dim strSrch As String '
Let strSrch = VBA.InputBox(prompt:="Type in all or part of text or texts to be searched for" & vbCrLf & "Seperate texts by at least one space", Title:="Input text to be searched for in text File lines", Default:="KB23 6872 35689", xpos:=100, ypos:=100)
Let strSrch = Evaluate("=TRIM(SUBSTITUTE(" & """" & strSrch & """" & ",CHAR(32)," & """" & " " & """" & "))") ' TRIM function trims the 7-bit ASCII space character (value 32). In the Unicode character set, there is an additional space character called the nonbreaking space character that has a decimal value of 160. This character is commonly used in Web pages as the HTML entity, &nbsp;. By itself, the TRIM function does not remove this nonbreaking space character. https://www.excelforum.com/excel-formulas-and-functions/1217202-is-there-a-function-similar-to-trim-but-that-only-removes-trailing-spaces-2.html
Dim SrchTxts() As String ' VBA strings function split to be used to get individual text into elements of an Array. The split function returns an array of string type elements
Let SrchTxts() = VBA.Split(strSrch, " ", -1, vbTextCompare) ' Split the ( strSrch , using space as delimiter , for unrestricted count , using text compare which is case insensitive )
For RecardRow = 2 To RecardRows 'At each record row
Dim Txtie As Long ' in default example this is 0 1 2
For Txtie = 0 To UBound(SrchTxts()) ' VBA Split retuns a 1 dimension array starting at indicie 0 For example we have indicies of 0 1 2 givig three elements in total of KB23 6872 35689
Dim strFnded As String
If InStr(1, arrOut(RecardRow), SrchTxts(Txtie), vbTextCompare) > 0 Then Let strFnded = strFnded & vbCrLf & arrOut(RecardRow) ' The returned postion along from the left ( starting from fist character , in the current row , looking for current text string , compare text which is case insensitive ) This will return 0 if not found and if found the postione along from the left in the row string where the search string part starts. So an found position will do for a find
Next Txtie
Next RecardRow

Rem 6) Display search results
Let strSrch = Replace(strSrch, " ", vbCrLf, 1, -1, vbBinaryCompare) 'replace in ( strSrch , space , with carriage return , start at and return from first character , no resriction on count , compare of exact computer memory so effectively case sensitive which is probably faster ) for convinent string list in output later
MsgBox prompt:="You looked for" & vbCrLf & strSrch & vbCrLf & vbCrLf & "Finded was" & strFnded
Debug.Print "You looked for" & vbCrLf & strSrch & vbCrLf & vbCrLf & "Finded was" & strFnded
Exit Sub ' Normal code ending
GetLaid: ' "Error handling code section http://www.excelfox.com/forum/showthread.php/2239-Resume-On-Error-GoTo-0-1-GoTo-Error-Handling-Statements-Runtime-VBA-Error-Handling-ORNeRe-GoRoT-N0Nula-1
MsgBox (Err.Description)
Close AEL_Highway ' Datei scheißen
End Sub



Some typical results in next post

DocAElstein
03-28-2018, 01:36 PM
Using this File:
“UpdatesOnVistaAspire4810TZG25thMarch.txt” : https://app.box.com/s/z90o8yj7iz0188yci34mu7gahe2tfhce
That file is downloaded into the same Folder as the file containing the code from the last Post.
This code line needs to have that text file reference in it such:
Let ActiviEL = ThisWorkbook.Path & "\UpdatesOnVistaAspire4810TZG25thMarch.txt"
Run code entering these search values when prompted
2553154 2726958 2965291 2920813 3054873 974554

Here the output string

You looked for
2553154
2726958
2965291
2920813
3054873
974554

Finded was

_.______________________________________________


Using this File:
“UpdatesAcerMartinWin7Pro64Bit26thMarch.txt” : https://app.box.com/s/8m96l0e7yh1wcb15y06eaaz6a7vtjzgd
That file is downloaded into the same Folder as the file containing the code from the last Post.
This code line needs to have that text file reference in it such:
Let ActiviEL = ThisWorkbook.Path & "\“UpdatesAcerMartinWin7Pro64Bit26thMarch.txt"
Run code entering these search values when prompted
2553154 2726958 2965291 2920813 3054873 974554

Here the output string

You looked for
2553154
2726958
2965291
2920813
3054873
974554

Finded was

DocAElstein
03-29-2018, 04:13 PM
Appendix notes in support of these Threads:
http://www.excelfox.com/forum/showthread.php/2242-Excel-2003-ActiveX-controls-embedded-in-worksheet-not-working-then-can%E2%80%99t-even-insert-them
http://www.excelfox.com/forum/showthread.php/2241-VBA-Worksheet-Buttons-Form-controls-Command-Buttons-verses-ActiveX-controls-Command-Buttons

Trying to find .exd files and delete them.
The results of most of what I have read or results of asking people suggests that they are usually findable if you look for a temp or temp somewhere in a file path

These appear a bit difficult to find sometimes . You can try:

_ manually navigating

_ a windows explorer search for *.exd
StarDotexeExplorerSearch.JPG : https://imgur.com/hfbC93Z
2037

_ a search in a small bar using %temp% or %Temp%
You can get the small bar from either hitting WindowsKey+r or by selecting the Windows symbol
PerCenttempPerCentsearch.JPG : https://imgur.com/LypHLGY
2038
PerCenttempPerCentsearch2.jpg : https://imgur.com/DZvycco
2039

It seems a bit inconsistent which search finds what, but usually it is said that you find important places looking something like these:
C:\Users\username\AppData\Local\Temp\Excel8.0
C:\Users\username\AppData\Local\Temp\VBE

I found sometimes .exd files here also
C:\Users\username\Application Data\Microsoft\Forms

Some other typical places I found
C:\Dokumente und Einstellungen\Administrator\Application Data\Microsoft\Forms
C:\Dokumente und Einstellungen\Administrator\AppData\LocalLow

_.____._____________________

This is one of my typical attempts to get a ActiveX control button to_... either
_ insert into worksheet
or , if already three
_ work
_... by deleting .exd files

What I typically tried:
I looked here C:\Users\Elston\AppData\Local\Temp\Excel8.0
I found this:
C Users Elston AppData Local Temp Excel8.0.jpg https://imgur.com/doXstmr
2040

I deleted that MSForms.exd File ( Excel had to be closed to do that ) : It had no effect. ( By the way, MSForms.exd gets made again every time I hit the button, or it appears to get made as soon as I open any file that either has or has ever had a control embedded in a worksheet)


In C:\Users\Elston\AppData\Local\Temp\VBE I found these:
C Users Elston AppData Local Temp VBE.jpg https://imgur.com/wjaZpXp
2041

So…for these files I did:…
MSComctlLib.exd : I deleted this , - no effect
MSForms.exd : This could not be deleted with Excel 2003 open, it can when it is closed. But that had no effect
RefEdit.exd : This could not be deleted with Excel 2003 open, it can when it is closed. But no that had effect
( By the way, MSForms.exd and RefEdit.exd get made again every time I hit the button, or it appears to get made as soon as I open any file that either has, or has ever had, a control embedded in a worksheet )


In C:\Users\Elston\Application Data\Microsoft\Forms
I found these:
( https://imgur.com/Lv2kyhk )

So……for these files I did:…
RefEdit.exd This could not be deleted with Excel 2003 open, it can when it is closed. But that had no effect
mscomctllib.exd I deleted this: That had no effect
SHDocVw.exd I deleted this: That had no effect
( By the way, MSForms.exd gets made again every time I hit the button, or it appears to get made as soon as I open any file that either has or has ever had a control embedded in a worksheet)

_.._______________-

So for me none of that helped to get me a working ActiveX control Button in a worksheet.

:(

DocAElstein
04-02-2018, 02:00 PM
Screenshots and extra notes in support of this Thread:
http://www.excelfox.com/forum/showthread.php/2238-Copy-data-from-Unique-files-into-Masterfile-all-the-files-in-the-same-folder?p=10595#post10595



Distributed Files for the day for "Raghu.xlsx"
From Raghu
Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N

1
S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member


2
1ABC01
$ 55.00
22
$ 1,210.00
15. Mrz 18Raghu


3
5ABC05
$ 7.22
62
$ 447.64
15. Mrz 18Raghu


4
9ABC09
$ 741.99
101
$ 74,940.99
15. Mrz 18Raghu


5
13ABC13
$ 8.51
12
$ 102.12
15. Mrz 18Raghu


6
17ABC17
$ 11.99
1
$ 11.99
15. Mrz 18Raghu


7
21ABC21
$ 12.99
5
$ 64.95
15. Mrz 18Raghu


8
25ABC25
$ 333.45
99
$ 33,011.55
15. Mrz 18Raghu


9
29ABC29
$ 13.66
7
$ 95.62
15. Mrz 18Raghu


10
33ABC33
$ 3.99
35
$ 139.65
15. Mrz 18Raghu


11
37ABC37
$ 55.00
22
$ 1,210.00
15. Mrz 18Raghu


12
41ABC41
$ 7.22
62
$ 447.64
15. Mrz 18Raghu


13
45ABC45
$ 741.99
101
$ 74,940.99
15. Mrz 18Raghu
Worksheet: FromRaghu



Or if distributed today, 2nd April
Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N

1
S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member


2
1ABC01
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


3
5ABC05
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


4
9ABC09
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu


5
13ABC13
$ 8.51
12
$ 102.12 02.Apr.2018Raghu


6
17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018Raghu


7
21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018Raghu


8
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu


9
29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018Raghu


10
33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018Raghu


11
37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


12
41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


13
45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu
Worksheet: Tabelle1

_.________________________

In next Post could be a typical returned worksheet from a team member : ( based on similar files in the Zip Folder "WorkDistributedAndConsolidated 16MAR18.zip" )

DocAElstein
04-02-2018, 02:01 PM
From last post...

This could be a typical returned worksheet from a team member : ( based on similar files in the Zip Folder "WorkDistributedAndConsolidated 16MAR18.zip" )
Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N

1
S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member


2
1ABC01
$ 55.00
22
$ 1,210.00
15. Mrz 18RT1RT2RT3RT4
02. Apr 18Raghu


3
5ABC05
$ 7.22
62
$ 447.64
15. Mrz 18RT1RT2RT3RT4
02. Apr 18Raghu


4
9ABC09
$ 741.99
101
$ 74,940.99
15. Mrz 18RT1RT2RT3RT4
02. Apr 18Raghu


5
13ABC13
$ 8.51
12
$ 102.12
15. Mrz 18RT1RT2RT3RT4
02. Apr 18Raghu


6
17ABC17
$ 11.99
1
$ 11.99
15. Mrz 18RT1RT2RT3RT4
02. Apr 18Raghu


7
21ABC21
$ 12.99
5
$ 64.95
15. Mrz 18Raghu


8
25ABC25
$ 333.45
99
$ 33,011.55
15. Mrz 18Raghu


9
29ABC29
$ 13.66
7
$ 95.62
15. Mrz 18Raghu


10
33ABC33
$ 3.99
35
$ 139.65
15. Mrz 18Raghu


11
37ABC37
$ 55.00
22
$ 1,210.00
15. Mrz 18Raghu


12
41ABC41
$ 7.22
62
$ 447.64
15. Mrz 18Raghu


13
45ABC45
$ 741.99
101
$ 74,940.99
15. Mrz 18Raghu
Worksheet: FromRaghu

or this
Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N

1
S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member


2
1ABC01
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


3
5ABC05
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


4
9ABC09
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


5
13ABC13
$ 8.51
12
$ 102.12 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


6
17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


7
21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018Raghu


8
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu


9
29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018Raghu


10
33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018Raghu


11
37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


12
41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


13
45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu
Worksheet: Tabelle1

DocAElstein
04-02-2018, 02:26 PM
For this Post
http://www.excelfox.com/forum/showthread.php/2238-Copy-data-from-Unique-files-into-Masterfile-all-the-files-in-the-same-folder?p=10595#post10595

Daily data files completed by team members:
John


S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated


2ABC02
$ 13.66
7
$ 95.62 02.Apr.2018JT1JT2JT3JT402.Apr.2018


6ABC06
$ 3.99
35
$ 139.65 02.Apr.2018JT1JT2JT3JT402.Apr.2018


10ABC10
$ 55.00
22
$ 1,210.00 02.Apr.2018JT1JT2JT3JT402.Apr.2018


14ABC14
$ 7.22
62
$ 447.64 02.Apr.2018JT1JT2JT3JT402.Apr.2018


18ABC18
$ 741.99
101
$ 74,940.99 02.Apr.2018JT1JT2JT3JT402.Apr.2018


22ABC22
$ 8.51
12
$ 102.12 02.Apr.2018JT1JT2JT3JT402.Apr.2018


26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018
Worksheet: Tabelle1

Greg


3ABC03
$ 12.99
5
$ 64.95 02.Apr.2018GT1GT2GT3GT402.Apr.2018


7ABC07
$ 333.45
99
$ 33,011.55 02.Apr.2018GT1GT2GT3GT402.Apr.2018


11ABC11
$ 13.66
7
$ 95.62 02.Apr.2018GT1GT2GT3GT402.Apr.2018


15ABC15
$ 3.99
35
$ 139.65 02.Apr.2018GT1GT2GT3GT402.Apr.2018


19ABC19
$ 55.00
22
$ 1,210.00 02.Apr.2018GT1GT2GT3GT402.Apr.2018


23ABC23
$ 7.22
62
$ 447.64 02.Apr.2018
Worksheet: Tabelle1

Margret


4ABC04
$ 8.51
12
$ 102.12 02.Apr.2018MT1MT2MT3MT402.Apr.2018


8ABC08
$ 11.99
1
$ 11.99 02.Apr.2018MT1MT2MT3MT402.Apr.2018


12ABC12
$ 12.99
5
$ 64.95 02.Apr.2018MT1MT2MT3MT402.Apr.2018


16ABC16
$ 333.45
99
$ 33,011.55 02.Apr.2018MT1MT2MT3MT402.Apr.2018


20ABC20
$ 13.66
7
$ 95.62 02.Apr.2018MT1MT2MT3MT402.Apr.2018


24ABC24
$ 3.99
35
$ 139.65 02.Apr.2018MT1MT2MT3MT402.Apr.2018


28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018MT1MT2MT3MT402.Apr.2018


32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018
Worksheet: Tabelle1


Raghu
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N

1
S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member


2
1ABC01
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


3
5ABC05
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


4
9ABC09
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


5
13ABC13
$ 8.51
12
$ 102.12 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


6
17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


7
21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018Raghu


8
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu
Worksheet: Tabelle1

DocAElstein
04-02-2018, 03:16 PM
From last Post... master File After Distribition and before Consolidation
File: “zMasterBeforeConsolidation.xlsm”
https://app.box.com/s/818q2ev3owpini2202n3dqp3xxicfeif



S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member
Checked


1ABC01
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


2ABC02
$ 13.66
7
$ 95.62 02.Apr.2018John


3ABC03
$ 12.99
5
$ 64.95 02.Apr.2018Greg


4ABC04
$ 8.51
12
$ 102.12 02.Apr.2018Margaret


5ABC05
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


6ABC06
$ 3.99
35
$ 139.65 02.Apr.2018John


7ABC07
$ 333.45
99
$ 33,011.55 02.Apr.2018Greg


8ABC08
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


9ABC09
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu


10ABC10
$ 55.00
22
$ 1,210.00 02.Apr.2018John


11ABC11
$ 13.66
7
$ 95.62 02.Apr.2018Greg


12ABC12
$ 12.99
5
$ 64.95 02.Apr.2018Margaret


13ABC13
$ 8.51
12
$ 102.12 02.Apr.2018Raghu


14ABC14
$ 7.22
62
$ 447.64 02.Apr.2018John


15ABC15
$ 3.99
35
$ 139.65 02.Apr.2018Greg


16ABC16
$ 333.45
99
$ 33,011.55 02.Apr.2018Margaret


17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018Raghu


18ABC18
$ 741.99
101
$ 74,940.99 02.Apr.2018John


19ABC19
$ 55.00
22
$ 1,210.00 02.Apr.2018Greg


20ABC20
$ 13.66
7
$ 95.62 02.Apr.2018Margaret


21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018Raghu


22ABC22
$ 8.51
12
$ 102.12 02.Apr.2018John


23ABC23
$ 7.22
62
$ 447.64 02.Apr.2018Greg


24ABC24
$ 3.99
35
$ 139.65 02.Apr.2018Margaret


25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu


26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018John


27ABC27
$ 741.99
101
$ 74,940.99 02.Apr.2018Greg


28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018Margaret


29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018Raghu


30ABC30
$ 12.99
5
$ 64.95 02.Apr.2018John


31ABC31
$ 8.51
12
$ 102.12 02.Apr.2018Greg


32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018Margaret


33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018Raghu


34ABC34
$ 333.45
99
$ 33,011.55 02.Apr.2018John


35ABC35
$ 11.99
1
$ 11.99 02.Apr.2018Greg


36ABC36
$ 741.99
101
$ 74,940.99 02.Apr.2018Margaret


37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018John


39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg


40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018Margaret


41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John


43ABC43
$ 333.45
99
$ 33,011.55 02.Apr.2018Greg


44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu




Worksheet: OriginalData

DocAElstein
04-02-2018, 05:28 PM
Using Excel 2007 32 bit


S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member
Checked


1ABC01
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


2ABC02
$ 13.66
7
$ 95.62 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


3ABC03
$ 12.99
5
$ 64.95 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


4ABC04
$ 8.51
12
$ 102.12 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


5ABC05
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


6ABC06
$ 3.99
35
$ 139.65 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


7ABC07
$ 333.45
99
$ 33,011.55 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


8ABC08
$ 11.99
1
$ 11.99 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


9ABC09
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


10ABC10
$ 55.00
22
$ 1,210.00 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


11ABC11
$ 13.66
7
$ 95.62 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


12ABC12
$ 12.99
5
$ 64.95 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


13ABC13
$ 8.51
12
$ 102.12 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


14ABC14
$ 7.22
62
$ 447.64 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


15ABC15
$ 3.99
35
$ 139.65 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


16ABC16
$ 333.45
99
$ 33,011.55 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


18ABC18
$ 741.99
101
$ 74,940.99 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


19ABC19
$ 55.00
22
$ 1,210.00 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


20ABC20
$ 13.66
7
$ 95.62 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018Raghu


22ABC22
$ 8.51
12
$ 102.12 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


23ABC23
$ 7.22
62
$ 447.64 02.Apr.2018Greg


24ABC24
$ 3.99
35
$ 139.65 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu


26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018John


27ABC27
$ 741.99
101
$ 74,940.99 02.Apr.2018Greg


28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018Raghu


30ABC30
$ 12.99
5
$ 64.95 02.Apr.2018John


31ABC31
$ 8.51
12
$ 102.12 02.Apr.2018Greg


32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018Margaret


33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018Raghu


34ABC34
$ 333.45
99
$ 33,011.55 02.Apr.2018John


35ABC35
$ 11.99
1
$ 11.99 02.Apr.2018Greg


36ABC36
$ 741.99
101
$ 74,940.99 02.Apr.2018Margaret


37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018John


39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg


40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018Margaret


41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John


43ABC43
$ 333.45
99
$ 33,011.55 02.Apr.2018Greg


44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu


Worksheet: OriginalData

DocAElstein
04-02-2018, 05:44 PM
Some similar results to the last from previous post
These are from a File supplied by Raghu




S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member


1ABC01
$ 55.00
22
$ 1,210.00
15. Mrz 18RT1RT2RT3RT4
16. Mrz 18
16. Mrz 18Raghu


2ABC02
$ 13.66
7
$ 95.62
15. Mrz 18JT1JT2JT3JT4
15. Mrz 18
16. Mrz 18John


3ABC03
$ 12.99
5
$ 64.95
15. Mrz 18GT1GT2GT3GT4
16. Mrz 18
16. Mrz 18Greg


4ABC04
$ 8.51
12
$ 102.12
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


5ABC05
$ 7.22
62
$ 447.64
15. Mrz 18RT1RT2RT3RT4
16. Mrz 18
16. Mrz 18Raghu


6ABC06
$ 3.99
35
$ 139.65
15. Mrz 18JT1JT2JT3JT4
15. Mrz 18
16. Mrz 18John


7ABC07
$ 333.45
99
$ 33,011.55
15. Mrz 18GT1GT2GT3GT4
16. Mrz 18
16. Mrz 18Greg


8ABC08
$ 11.99
1
$ 11.99
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


9ABC09
$ 741.99
101
$ 74,940.99
15. Mrz 18RT1RT2RT3RT4
16. Mrz 18
16. Mrz 18Raghu


10ABC10
$ 55.00
22
$ 1,210.00
15. Mrz 18JT1JT2JT3JT4
15. Mrz 18
16. Mrz 18John


11ABC11
$ 13.66
7
$ 95.62
15. Mrz 18GT1GT2GT3GT4
16. Mrz 18
16. Mrz 18Greg


12ABC12
$ 12.99
5
$ 64.95
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


13ABC13
$ 8.51
12
$ 102.12
15. Mrz 18RT1RT2RT3RT4
16. Mrz 18
16. Mrz 18Raghu


14ABC14
$ 7.22
62
$ 447.64
15. Mrz 18JT1JT2JT3JT4
15. Mrz 18
16. Mrz 18John


15ABC15
$ 3.99
35
$ 139.65
15. Mrz 18GT1GT2GT3GT4
16. Mrz 18
16. Mrz 18Greg


16ABC16
$ 333.45
99
$ 33,011.55
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


17ABC17
$ 11.99
1
$ 11.99
15. Mrz 18RT1RT2RT3RT4
16. Mrz 18
16. Mrz 18Raghu


18ABC18
$ 741.99
101
$ 74,940.99
15. Mrz 18JT1JT2JT3JT4
16. Mrz 18
16. Mrz 18John


19ABC19
$ 55.00
22
$ 1,210.00
15. Mrz 18GT1GT2GT3GT4
16. Mrz 18
16. Mrz 18Greg


20ABC20
$ 13.66
7
$ 95.62
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


21ABC21
$ 12.99
5
$ 64.95
15. Mrz 18Raghu


22ABC22
$ 8.51
12
$ 102.12
15. Mrz 18JT1JT2JT3JT4
16. Mrz 18
16. Mrz 18John


23ABC23
$ 7.22
62
$ 447.64
15. Mrz 18Greg


24ABC24
$ 3.99
35
$ 139.65
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


25ABC25
$ 333.45
99
$ 33,011.55
15. Mrz 18Raghu


26ABC26
$ 11.99
1
$ 11.99
15. Mrz 18John


27ABC27
$ 741.99
101
$ 74,940.99
15. Mrz 18Greg


28ABC28
$ 55.00
22
$ 1,210.00
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


29ABC29
$ 13.66
7
$ 95.62
15. Mrz 18Raghu


30ABC30
$ 12.99
5
$ 64.95
15. Mrz 18John


31ABC31
$ 8.51
12
$ 102.12
15. Mrz 18Greg


32ABC32
$ 7.22
62
$ 447.64
15. Mrz 18Margaret


33ABC33
$ 3.99
35
$ 139.65
15. Mrz 18Raghu


34ABC34
$ 333.45
99
$ 33,011.55
15. Mrz 18John
Worksheet: OriginalData

DocAElstein
04-02-2018, 05:47 PM
Bottom part of worksheet shown in last Post
here we see new data added ( rows 47 to 51 ( S No 46 - S no 50 )

Using Excel 2007 32 bit


16ABC16
$ 333.45
99
$ 33,011.55
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


17ABC17
$ 11.99
1
$ 11.99
15. Mrz 18RT1RT2RT3RT4
16. Mrz 18
16. Mrz 18Raghu


18ABC18
$ 741.99
101
$ 74,940.99
15. Mrz 18JT1JT2JT3JT4
16. Mrz 18
16. Mrz 18John


19ABC19
$ 55.00
22
$ 1,210.00
15. Mrz 18GT1GT2GT3GT4
16. Mrz 18
16. Mrz 18Greg


20ABC20
$ 13.66
7
$ 95.62
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


21ABC21
$ 12.99
5
$ 64.95
15. Mrz 18Raghu


22ABC22
$ 8.51
12
$ 102.12
15. Mrz 18JT1JT2JT3JT4
16. Mrz 18
16. Mrz 18John


23ABC23
$ 7.22
62
$ 447.64
15. Mrz 18Greg


24ABC24
$ 3.99
35
$ 139.65
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


25ABC25
$ 333.45
99
$ 33,011.55
15. Mrz 18Raghu


26ABC26
$ 11.99
1
$ 11.99
15. Mrz 18John


27ABC27
$ 741.99
101
$ 74,940.99
15. Mrz 18Greg


28ABC28
$ 55.00
22
$ 1,210.00
15. Mrz 18MT1MT2MT3MT4
16. Mrz 18
16. Mrz 18Margaret


29ABC29
$ 13.66
7
$ 95.62
15. Mrz 18Raghu


30ABC30
$ 12.99
5
$ 64.95
15. Mrz 18John


31ABC31
$ 8.51
12
$ 102.12
15. Mrz 18Greg


32ABC32
$ 7.22
62
$ 447.64
15. Mrz 18Margaret


33ABC33
$ 3.99
35
$ 139.65
15. Mrz 18Raghu


34ABC34
$ 333.45
99
$ 33,011.55
15. Mrz 18John


35ABC35
$ 11.99
1
$ 11.99
15. Mrz 18Greg


36ABC36
$ 741.99
101
$ 74,940.99
15. Mrz 18Margaret


37ABC37
$ 55.00
22
$ 1,210.00
15. Mrz 18Raghu


38ABC38
$ 13.66
7
$ 95.62
15. Mrz 18John


39ABC39
$ 12.99
5
$ 64.95
15. Mrz 18Greg


40ABC40
$ 8.51
12
$ 102.12
15. Mrz 18Margaret


41ABC41
$ 7.22
62
$ 447.64
15. Mrz 18Raghu


42ABC42
$ 3.99
35
$ 139.65
15. Mrz 18John


43ABC43
$ 333.45
99
$ 33,011.55
15. Mrz 18Greg


44ABC44
$ 11.99
1
$ 11.99
15. Mrz 18Margaret


45ABC45
$ 741.99
101
$ 74,940.99
15. Mrz 18Raghu


46ABC46
$ 8.51
12
$ 102.12
16. Mrz 18John


47ABC47
$ 7.22
62
$ 447.64
16. Mrz 18Greg


48ABC48
$ 3.99
35
$ 139.65
16. Mrz 18Margaret


49ABC49
$ 333.45
99
$ 33,011.55
16. Mrz 18Raghu


50ABC50
$ 11.99
1
$ 11.99
16. Mrz 18Raghu


Worksheet: OriginalData

DocAElstein
04-02-2018, 05:55 PM
Typical Updated Data File, "Raghu.xlsx" after first consolidation,
with the column L updated appropriately with the consolidation date



Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

1
S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member


2
1ABC01
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


3
5ABC05
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


4
9ABC09
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


5
13ABC13
$ 8.51
12
$ 102.12 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


6
17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


7
21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018Raghu


8
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu


9
29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018Raghu


10
33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018Raghu


11
37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


12
41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


13
45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu


14
Worksheet: Tabelle1

DocAElstein
04-02-2018, 06:15 PM
“zMasterAfter1stConsolidationNewData.xlsm” : https://app.box.com/s/ascky2qg47dzl85b4y7l8sy5qmr3goby




Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

19
18ABC18
$ 741.99
101
$ 74,940.99 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


20
19ABC19
$ 55.00
22
$ 1,210.00 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


21
20ABC20
$ 13.66
7
$ 95.62 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


22
21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018Raghu


23
22ABC22
$ 8.51
12
$ 102.12 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


24
23ABC23
$ 7.22
62
$ 447.64 02.Apr.2018Greg


25
24ABC24
$ 3.99
35
$ 139.65 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


26
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu


27
26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018John


28
27ABC27
$ 741.99
101
$ 74,940.99 02.Apr.2018Greg


29
28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


30
29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018Raghu


31
30ABC30
$ 12.99
5
$ 64.95 02.Apr.2018John


32
31ABC31
$ 8.51
12
$ 102.12 02.Apr.2018Greg


33
32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018Margaret


34
33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018Raghu


35
34ABC34
$ 333.45
99
$ 33,011.55 02.Apr.2018John


36
35ABC35
$ 11.99
1
$ 11.99 02.Apr.2018Greg


37
36ABC36
$ 741.99
101
$ 74,940.99 02.Apr.2018Margaret


38
37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


39
38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018John


40
39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg


41
40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018Margaret


42
41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


43
42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John


44
43ABC43
$ 333.45
99
$ 33,011.55 02.Apr.2018Greg


45
44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


46
45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu


47
46ABC46
$ 8.51
12
$ 102.12
John


48
47ABC47
$ 7.22
62
$ 447.64
Greg


49
48ABC48
$ 3.99
35
$ 139.65
Margaret


50
49ABC49
$ 333.45
99
$ 33,011.55
Raghu


51
50ABC50
$ 11.99
1
$ 11.99
Raghu


52
Worksheet: OriginalData

DocAElstein
04-02-2018, 06:26 PM
Run Code Sub ExportByName() on data from last post

Results for Updated master Worksheet

Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

25
24ABC24
$ 3.99
35
$ 139.65 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


26
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018Raghu


27
26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018John


28
27ABC27
$ 741.99
101
$ 74,940.99 02.Apr.2018Greg


29
28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


30
29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018Raghu


31
30ABC30
$ 12.99
5
$ 64.95 02.Apr.2018John


32
31ABC31
$ 8.51
12
$ 102.12 02.Apr.2018Greg


33
32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018Margaret


34
33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018Raghu


35
34ABC34
$ 333.45
99
$ 33,011.55 02.Apr.2018John


36
35ABC35
$ 11.99
1
$ 11.99 02.Apr.2018Greg


37
36ABC36
$ 741.99
101
$ 74,940.99 02.Apr.2018Margaret


38
37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018Raghu


39
38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018John


40
39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg


41
40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018Margaret


42
41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


43
42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John


44
43ABC43
$ 333.45
99
$ 33,011.55 02.Apr.2018Greg


45
44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


46
45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu


47
46ABC46
$ 8.51
12
$ 102.12
02.Apr.2018John


48
47ABC47
$ 7.22
62
$ 447.64
02.Apr.2018Greg


49
48ABC48
$ 3.99
35
$ 139.65
02.Apr.2018Margaret


50
49ABC49
$ 333.45
99
$ 33,011.55
02.Apr.2018Raghu


51
50ABC50
$ 11.99
1
$ 11.99
02.Apr.2018Raghu


52


53


54
Worksheet: OriginalData

DocAElstein
04-02-2018, 06:31 PM
Corresponding updated data worksheets for updated master after running Sub ExportByName() for the second time after new data was added

Using Excel 2007 32 bit


41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018Raghu


45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018Raghu


49ABC49$ 333.45
99$ 33,011.5502.Apr.2018Raghu


50ABC50$ 11.99
1$ 11.9902.Apr.2018Raghu


Worksheet: Tabelle1





Using Excel 2007 32 bit


40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018Margaret


44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


48ABC48$ 3.99
35$ 139.6502.Apr.2018Margaret


Worksheet: Tabelle1



Using Excel 2007 32 bit


38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018John


42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John


46ABC46$ 8.51
12$ 102.1202.Apr.2018John




Worksheet: Tabelle1



Using Excel 2007 32 bit


39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg


43ABC43
$ 333.45
99
$ 33,011.55 02.Apr.2018Greg


47ABC47$ 7.22
62$ 447.6402.Apr.2018Greg


Worksheet: Tabelle1

DocAElstein
04-02-2018, 06:44 PM
Data Files just before second consolidation




15ABC15
$ 3.99
35
$ 139.65 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


19ABC19
$ 55.00
22
$ 1,210.00 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


23ABC23
$ 7.22
62
$ 447.64 02.Apr.2018GT1GT2GT3GT402.Apr.2018Greg


27ABC27
$ 741.99
101
$ 74,940.99 02.Apr.2018GT1GT2GT3GT402.Apr.2018Greg


31ABC31
$ 8.51
12
$ 102.12 02.Apr.2018GT1GT2GT3GT402.Apr.2018Greg


35ABC35
$ 11.99
1
$ 11.99 02.Apr.2018GT1GT2GT3GT402.Apr.2018Greg


39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg
Worksheet: Tabelle1





18ABC18
$ 741.99
101
$ 74,940.99 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


22ABC22
$ 8.51
12
$ 102.12 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018JT1JT2JT3JT402.Apr.2018John


30ABC30
$ 12.99
5
$ 64.95 02.Apr.2018JT1JT2JT3JT402.Apr.2018John


34ABC34
$ 333.45
99
$ 33,011.55 02.Apr.2018JT1JT2JT3JT402.Apr.2018John


38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018JT1JT2JT3JT402.Apr.2018John


42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John
Worksheet: Tabelle1








28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018MT1MT2MT3MT402.Apr.2018Margaret


36ABC36
$ 741.99
101
$ 74,940.99 02.Apr.2018MT1MT2MT3MT402.Apr.2018Margaret


40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018MT1MT2MT3MT402.Apr.2018Margaret


44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret
Worksheet: Tabelle1



Using Excel 2007 32 bit


17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


49ABC49$ 333.45
99$ 33,011.5502.Apr.2018RT1RT2RT3RT4
02. Apr 18Raghu


50ABC50$ 11.99
1$ 11.9902.Apr.2018Raghu


Worksheet: Tabelle1

DocAElstein
04-02-2018, 06:55 PM
Final results for first half of master File after second consolidation

Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

1
S No
Item
Price
Qty
Total
Distributed
Task1
Task2
Task3
Task4
Completed
Consolidated
Comments
Team Member
Checked


2
1ABC01
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


3
2ABC02
$ 13.66
7
$ 95.62 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


4
3ABC03
$ 12.99
5
$ 64.95 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


5
4ABC04
$ 8.51
12
$ 102.12 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


6
5ABC05
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


7
6ABC06
$ 3.99
35
$ 139.65 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


8
7ABC07
$ 333.45
99
$ 33,011.55 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


9
8ABC08
$ 11.99
1
$ 11.99 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


10
9ABC09
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


11
10ABC10
$ 55.00
22
$ 1,210.00 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


12
11ABC11
$ 13.66
7
$ 95.62 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


13
12ABC12
$ 12.99
5
$ 64.95 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


14
13ABC13
$ 8.51
12
$ 102.12 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


15
14ABC14
$ 7.22
62
$ 447.64 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


16
15ABC15
$ 3.99
35
$ 139.65 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


17
16ABC16
$ 333.45
99
$ 33,011.55 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


18
17ABC17
$ 11.99
1
$ 11.99 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


19
18ABC18
$ 741.99
101
$ 74,940.99 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


20
19ABC19
$ 55.00
22
$ 1,210.00 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


21
20ABC20
$ 13.66
7
$ 95.62 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


22
21ABC21
$ 12.99
5
$ 64.95 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


23
22ABC22
$ 8.51
12
$ 102.12 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


24
23ABC23
$ 7.22
62
$ 447.64 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


25
24ABC24
$ 3.99
35
$ 139.65 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


26
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu
Worksheet: OriginalData

DocAElstein
04-02-2018, 06:57 PM
Second half of master worksheet after final second consolidation

Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

25
24ABC24
$ 3.99
35
$ 139.65 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


26
25ABC25
$ 333.45
99
$ 33,011.55 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


27
26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


28
27ABC27
$ 741.99
101
$ 74,940.99 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


29
28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


30
29ABC29
$ 13.66
7
$ 95.62 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


31
30ABC30
$ 12.99
5
$ 64.95 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


32
31ABC31
$ 8.51
12
$ 102.12 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


33
32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


34
33ABC33
$ 3.99
35
$ 139.65 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


35
34ABC34
$ 333.45
99
$ 33,011.55 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


36
35ABC35
$ 11.99
1
$ 11.99 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


37
36ABC36
$ 741.99
101
$ 74,940.99 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


38
37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


39
38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


40
39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg


41
40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


42
41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


43
42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John


44
43ABC43
$ 333.45
99
$ 33,011.55 02.Apr.2018Greg


45
44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


46
45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


47
46ABC46
$ 8.51
12
$ 102.12
02.Apr.2018John


48
47ABC47
$ 7.22
62
$ 447.64
02.Apr.2018Greg


49
48ABC48
$ 3.99
35
$ 139.65
02.Apr.2018Margaret


50
49ABC49
$ 333.45
99
$ 33,011.55
02.Apr.2018RT1RT2RT3RT402.04.201802.Apr.2018Raghu


51
50ABC50
$ 11.99
1
$ 11.99
02.Apr.2018Raghu


52
Worksheet: OriginalData

DocAElstein
04-02-2018, 07:01 PM
Data files after final (second) consolidation:


Using Excel 2007 32 bit


15ABC15
$ 3.99
35
$ 139.65 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


19ABC19
$ 55.00
22
$ 1,210.00 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


23ABC23
$ 7.22
62
$ 447.64 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


27ABC27
$ 741.99
101
$ 74,940.99 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


31ABC31
$ 8.51
12
$ 102.12 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


35ABC35
$ 11.99
1
$ 11.99 02.Apr.2018GT1GT2GT3GT402.Apr.201802.Apr.2018Greg


39ABC39
$ 12.99
5
$ 64.95 02.Apr.2018Greg
Worksheet: Tabelle1



Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

11
37ABC37
$ 55.00
22
$ 1,210.00 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


12
41ABC41
$ 7.22
62
$ 447.64 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


13
45ABC45
$ 741.99
101
$ 74,940.99 02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


14
49ABC49
333.45 €
99
33,011.55 €02.Apr.2018RT1RT2RT3RT4
02. Apr 1802.Apr.2018Raghu


15
50ABC50
11.99 €
1
11.99 €02.Apr.2018Raghu


16
Worksheet: Tabelle1



Using Excel 2007 32 bit


28ABC28
$ 55.00
22
$ 1,210.00 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


32ABC32
$ 7.22
62
$ 447.64 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


36ABC36
$ 741.99
101
$ 74,940.99 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


40ABC40
$ 8.51
12
$ 102.12 02.Apr.2018MT1MT2MT3MT402.Apr.201802.Apr.2018Marga ret


44ABC44
$ 11.99
1
$ 11.99 02.Apr.2018Margaret


48ABC48
3.99 €
35
139.65 €02.Apr.2018Margaret
Worksheet: Tabelle1




Using Excel 2007 32 bit


26ABC26
$ 11.99
1
$ 11.99 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


30ABC30
$ 12.99
5
$ 64.95 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


34ABC34
$ 333.45
99
$ 33,011.55 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


38ABC38
$ 13.66
7
$ 95.62 02.Apr.2018JT1JT2JT3JT402.Apr.201802.Apr.2018John


42ABC42
$ 3.99
35
$ 139.65 02.Apr.2018John
Worksheet: Tabelle1

DocAElstein
04-02-2018, 07:17 PM
Code for anwser to this Thread:
http://www.excelfox.com/forum/showthread.php/2238-Copy-data-from-Unique-files-into-Masterfile-all-the-files-in-the-same-folder/page2




Option Explicit
Sub consolidateToo() ' http://www.excelfox.com/forum/showthread.php/2238-Copy-data-from-Unique-files-into-Masterfile-all-the-files-in-the-same-folder?p=10595#post10595
Rem 1 ThisWorkbook Info
Dim MWs1 As Worksheet: Set MWs1 = ThisWorkbook.Worksheets.Item(1) 'Worksheets("OriginalData")
Dim DtaFName As String: Let DtaFName = VBA.Dir(ThisWorkbook.Path & "\" & "*.xlsx") ' Search criteria set to all Files with .xlsx extension in the same Folder as this workbook, Dir returns first file name that fits criteria
Dim LrMWs1 As Long: Let LrMWs1 = MWs1.Range("A" & MWs1.Rows.Count & "").End(xlUp).Row
Rem 2 main Loop for all data files
Do While DtaFName <> "" ' ==========================================
Workbooks.Open filename:=ThisWorkbook.Path & "\" & DtaFName
Dim WBDta As Workbook: Set WBDta = ActiveWorkbook
Dim WBDtaWs1 As Worksheet: Set WBDtaWs1 = WBDta.Worksheets.Item(1) ' use variable to reference the first worksheet ( counting tabs from the left ) of last opened and therefore active( to be seen ) file
Dim arrIn() As Variant: Let arrIn() = WBDtaWs1.Range("A1").CurrentRegion.Value
'2a) loop for all data rows, copy data from completed rows to master file, ( add date to inputed data array '_-##)
Dim Rw As Long ' --------------------------------
For Rw = 2 To UBound(arrIn(), 1) ' loop through "rows" in data array
If arrIn(Rw, 11) <> Empty And arrIn(Rw, 12) = Empty Then ' Condition for completed work not yet consolidated
Dim arrCsDte(1 To 1, 1 To 7) As String: Let arrCsDte(1, 1) = arrIn(Rw, 7): arrCsDte(1, 2) = arrIn(Rw, 8): arrCsDte(1, 3) = arrIn(Rw, 9): arrCsDte(1, 4) = arrIn(Rw, 10): arrCsDte(1, 5) = arrIn(Rw, 11): arrCsDte(1, 6) = Format(Date, "dd.mmm.yyyy"): arrCsDte(1, 7) = arrIn(Rw, 13) ' 7 "columns" of data to be added to master file
MWs1.Range("A2:A" & LrMWs1 & "").Find(what:=arrIn(Rw, 1), After:=MWs1.Range("A2"), LookIn:=xlValues, Lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext).Offset(0, 6).Resize(1, 7) = arrCsDte() ' We look down the first column in the master file to find the cell comtaining the S No We apply the offest property to thast cell to get across to column G and then the resize property gives us the range of 7 columns to which we may apply the values in the array filled for the row data
Let arrIn(Rw, 12) = arrCsDte(1, 6) '(Put the current date in the array made from data range '_-##)
Else ' Datá row is completed and consolidated , so nothing to do for this row
End If
Next Rw ' End loop for all data rows --------
'2b) Update and close current data workbook
Let WBDtaWs1.Range("A1").Resize(UBound(arrIn(), 1), UBound(arrIn(), 2)).Value = arrIn() ' reassign the values from the input data array back to the range as this now has the consolidated date in it
WBDta.Close savechanges:=True
'2c Serch for next data file name
Let DtaFName = VBA.Dir() ' Unqualified Dir returns next found file with previos search criteria, but only returns each file name once
Loop ' Do While DtaFName <> "" again ==============================
End Sub

DocAElstein
04-07-2018, 12:43 AM
Some sample data for other Posts and Threads:
http://www.eileenslounge.com/viewtopic.php?f=30&t=29652
Using this code:

Sub Its() ' snb 2017
Dim It As Variant
For Each It In ThisWorkbook.VBProject.References
Dim strIts As String
Let strIts = strIts & "Description:" & vbTab & It.Description & vbCr & "Name:" & vbTab & vbTab & It.Name & vbCr & "Buitin:" & vbTab & vbTab & It.BuiltIn & vbCr & "Minor:" & vbTab & vbTab & It.minor & vbCr & "Major:" & vbTab & vbTab & It.major & vbCr & "FullPath:" & vbTab & vbTab & It.fullpath & vbCr & "GUID:" & vbTab & vbTab & It.GUID & vbCr & "Type:" & vbTab & vbTab & It.Type & vbCr & "Isbroken:" & vbTab & vbTab & It.isbroken & vbCr & vbCr
Next It
Debug.Print strIts ' From VB Editor Ctrl+g to get Immediate Window from which info can be copied
End Sub
Here some results. ( If anyone passing has other Excel versions and would like to pass on what the code above gives, then that would be nice, thanks :) )

Excel 2007

Description: Visual Basic For Applications
Name: VBA
Buitin: Wahr
Minor: 0
Major: 4
FullPath: C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6.DLL
GUID: {000204EF-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: Microsoft Excel 12.0 Object Library
Name: Excel
Buitin: Wahr
Minor: 6
Major: 1
FullPath: C:\Program Files\Microsoft Office\Office12\EXCEL.EXE
GUID: {00020813-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: OLE Automation
Name: stdole
Buitin: Falsch
Minor: 0
Major: 2
FullPath: C:\Windows\system32\stdole2.tlb
GUID: {00020430-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: Microsoft Office 12.0 Object Library
Name: Office
Buitin: Falsch
Minor: 4
Major: 2
FullPath: C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSO.DLL
GUID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
Type: 0
Isbroken: Falsch

Description: Microsoft Word 12.0 Object Library
Name: Word
Buitin: Falsch
Minor: 4
Major: 8
FullPath: C:\Program Files\Microsoft Office\Office12\MSWORD.OLB
GUID: {00020905-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch


Excel 2003

Description: Visual Basic For Applications
Name: VBA
Buitin: Wahr
Minor: 0
Major: 4
FullPath: C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6.DLL
GUID: {000204EF-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: Microsoft Excel 11.0 Object Library
Name: Excel
Buitin: Wahr
Minor: 5
Major: 1
FullPath: C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE
GUID: {00020813-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: OLE Automation
Name: stdole
Buitin: Falsch
Minor: 0
Major: 2
FullPath: C:\Windows\system32\stdole2.tlb
GUID: {00020430-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: Microsoft Office 11.0 Object Library
Name: Office
Buitin: Falsch
Minor: 3
Major: 2
FullPath: C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL
GUID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
Type: 0
Isbroken: Falsch

Description: Microsoft Word 12.0 Object Library
Name: Word
Buitin: Falsch
Minor: 4
Major: 8
FullPath: C:\Program Files\Microsoft Office\Office12\MSWORD.OLB
GUID: {00020905-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch





Excel 2010

Description: Visual Basic For Applications
Name: VBA
Buitin: Wahr
Minor: 1
Major: 4
FullPath: C:\PROGRA~2\COMMON~1\MICROS~1\VBA\VBA7\VBE7.DLL
GUID: {000204EF-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: Microsoft Excel 14.0 Object Library
Name: Excel
Buitin: Wahr
Minor: 7
Major: 1
FullPath: C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE
GUID: {00020813-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: OLE Automation
Name: stdole
Buitin: Falsch
Minor: 0
Major: 2
FullPath: C:\Windows\SysWOW64\stdole2.tlb
GUID: {00020430-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

Description: Microsoft Office 14.0 Object Library
Name: Office
Buitin: Falsch
Minor: 5
Major: 2
FullPath: C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\MSO.DLL
GUID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
Type: 0
Isbroken: Falsch

Description: Microsoft Word 14.0 Object Library
Name: Word
Buitin: Falsch
Minor: 5
Major: 8
FullPath: C:\Program Files (x86)\Microsoft Office\Office14\MSWORD.OLB
GUID: {00020905-0000-0000-C000-000000000046}
Type: 0
Isbroken: Falsch

DocAElstein
05-13-2018, 02:28 PM
To support solution to this Thread:
http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email


Test data supplied by Thainguyen for this Thread :
http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email




Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
N

1Equipment PM







2
Machine EQ.ID
Manufacture
Model
Description
Serial Number
Weekly
Date of Service
Weekly
Next Service
Monthly
Date of Service
Monthly
Next Service
Quarterly
Date of Service
Quarterly
Next Service
Softwear


3







4
1JUKIGKG GLGL SCREEN PRINTERA123
06.04.2018
13.04.2018
15.03.2018
12.04.2018
N/A
N/A


5
2JUKIKE-1070LSMT Placement MachineA124
11.04.2018
18.04.2018
28.03.2018
25.04.2018
N/A
N/A


6
9ACE ProductionKISS-101BSelective Wave SolderA125
06.04.2018
13.04.2018
15.03.2018
12.04.2018
N/A
N/A


7
59Heller1826 MK5Reflow OvenA126
N/A
N/A
16.03.2018
13.04.2018
N/A
N/A


8
62Exit Sign -- N/A -- Exit LightsN/AN/AA127
N/A
N/A
N/A
N/A
N/A
N/A


9
69South-Tek System N2-Gen 35STNitrogen GeneratorA128
10.04.2018
17.04.2018
N/A
N/A
09.03.2018
06.04.2018


10
75ACE ProductionKISS-102Selective Wave SolderA129
16.04.2018
23.04.2018
N/A
N/A
N/A
N/A


11
101FKN systemN100 NibblerDispensingA130
N/A
N/A
N/A
N/A
04.04.2018
02.05.2018


12
109MycronicMY200sxSMT MachineA131
N/A
N/A
N/A
N/A
N/A
N/A


13
112X-TEKXTV-160X-Ray SystemA132
N/A
N/A
N/A
N/A
N/A
N/A


14
113MIRTECMV-6 OMNIAOIA133
N/A
N/A
N/A
N/A
N/A
N/A


15
116JUKIKE-2060RLSMT Placement MachineA134
N/A
N/A
N/A
N/A
N/A
N/A


16
127ELGIEG22-150Air CompressorA135
N/A
N/A
N/A
N/A
N/A
N/A


17
128JukiKE-2050SMTA136
N/A
N/A
N/A
N/A
N/A
N/A


18
137JukiK3Screen printerA137
06.04.2018
13.04.2018
N/A
N/A
N/A
N/A


19
141Heller1826 MK5Reflow OvenA138
N/A
N/A
N/A
N/A
N/A
N/A


20
142NISSANMCU-112A331.VForkliftA139
N/A
N/A
N/A
N/A
15.02.2018
15.03.2018


21
142NISSAN/yearly oil change and lubeMCU-112A331.VForkliftA140
N/A
N/A
N/A
N/A
N/A
N/A


22





28.01.1900


23





Worksheet: Equipment PM

DocAElstein
05-13-2018, 02:31 PM
Another view of last table

( for Thread: http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email )

Using Excel 2007 32 bit

Equipment PM







Machine EQ.ID
Manufacture
Model
Description
Serial Number
Weekly
Date of Service
Weekly
Next Service
Monthly
Date of Service
Monthly
Next Service
Quarterly
Date of Service
Quarterly
Next Service









1JUKIGKG GLGL SCREEN PRINTERA123
06.04.2018
13.04.2018
15.03.2018
12.04.2018
N/A
N/A


2JUKIKE-1070LSMT Placement MachineA124
11.04.2018
18.04.2018
28.03.2018
25.04.2018
N/A
N/A


9ACE ProductionKISS-101BSelective Wave SolderA125
06.04.2018
13.04.2018
15.03.2018
12.04.2018
N/A
N/A


59Heller1826 MK5Reflow OvenA126
N/A
N/A
16.03.2018
13.04.2018
N/A
N/A


62Exit Sign -- N/A -- Exit LightsN/AN/AA127
N/A
N/A
N/A
N/A
N/A
N/A


69South-Tek System N2-Gen 35STNitrogen GeneratorA128
10.04.2018
17.04.2018
N/A
N/A
09.03.2018
06.04.2018


75ACE ProductionKISS-102Selective Wave SolderA129
16.04.2018
23.04.2018
N/A
N/A
N/A
N/A


101FKN systemN100 NibblerDispensingA130
N/A
N/A
N/A
N/A
04.04.2018
02.05.2018


109MycronicMY200sxSMT MachineA131
N/A
N/A
N/A
N/A
N/A
N/A


112X-TEKXTV-160X-Ray SystemA132
N/A
N/A
N/A
N/A
N/A
N/A


113MIRTECMV-6 OMNIAOIA133
N/A
N/A
N/A
N/A
N/A
N/A


116JUKIKE-2060RLSMT Placement MachineA134
N/A
N/A
N/A
N/A
N/A
N/A


127ELGIEG22-150Air CompressorA135
N/A
N/A
N/A
N/A
N/A
N/A


128JukiKE-2050SMTA136
N/A
N/A
N/A
N/A
N/A
N/A


137JukiK3Screen printerA137
06.04.2018
13.04.2018
N/A
N/A
N/A
N/A


141Heller1826 MK5Reflow OvenA138
N/A
N/A
N/A
N/A
N/A
N/A


142NISSANMCU-112A331.VForkliftA139
N/A
N/A
N/A
N/A
15.02.2018
15.03.2018


142NISSAN/yearly oil change and lubeMCU-112A331.VForkliftA140
N/A
N/A
N/A
N/A
N/A
N/A







28.01.1900
Worksheet: Equipment PM

DocAElstein
05-13-2018, 02:32 PM
Table from above again
Using Excel 2007 32 bit
Row\Col
F
G
H
I
J
K

1







2
Weekly
Date of Service
Weekly
Next Service
Monthly
Date of Service
Monthly
Next Service
Quarterly
Date of Service
Quarterly
Next Service


3







4
06.04.2018
13.04.2018
15.03.2018
12.04.2018
N/A
N/A


5
11.04.2018
18.04.2018
28.03.2018
25.04.2018
N/A
N/A


6
06.04.2018
13.04.2018
15.03.2018
12.04.2018
N/A
N/A


7
N/A
N/A
16.03.2018
13.04.2018
N/A
N/A


8
N/A
N/A
N/A
N/A
N/A
N/A


9
10.04.2018
17.04.2018
N/A
N/A
09.03.2018
06.04.2018


10
16.04.2018
23.04.2018
N/A
N/A
N/A
N/A


11
N/A
N/A
N/A
N/A
04.04.2018
02.05.2018


12
N/A
N/A
N/A
N/A
N/A
N/A


13
N/A
N/A
N/A
N/A
N/A
N/A


14
N/A
N/A
N/A
N/A
N/A
N/A


15
N/A
N/A
N/A
N/A
N/A
N/A


16
N/A
N/A
N/A
N/A
N/A
N/A


17
N/A
N/A
N/A
N/A
N/A
N/A


18
06.04.2018
13.04.2018
N/A
N/A
N/A
N/A


19
N/A
N/A
N/A
N/A
N/A
N/A


20
N/A
N/A
N/A
N/A
15.02.2018
15.03.2018


21
N/A
N/A
N/A
N/A
N/A
N/A


22





28.01.1900
Worksheet: Equipment PM

DocAElstein
05-13-2018, 02:40 PM
Code for this Thread:
http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email



Option Explicit
Private Sub Workbook_Open()
Rem 1 Worksheets Info.
Dim Ws As Worksheet: Set Ws = ThisWorkbook.Worksheets("Equipment PM")
Dim Lr As Long: Let Lr = Ws.Range("A" & Ws.Rows.Count & "").End(xlUp).Row
Rem 2 data range
Dim arrIn() As Variant: Let arrIn() = Ws.Range("A1:K" & Lr & "").Value2
Rem 3 Todays date as Double(Long) number
Dim TdyDbl As Long: Let TdyDbl = CLng(Now()) ' like 43233 for 13 May 2018
Let TdyDbl = CLng(DateSerial(2018, 3, 15)) - 3 ' To test only #####
Rem 4 Rows for due date for next service for weekly(G), Monthly(I), and Quarterly(K). Code to pick up the date from these columns and automatic send email notification 3 days before the due date.
'4a) determine rows as string or those row numbers
Dim Rw As Long
For Rw = 4 To Lr Step 1
If arrIn(Rw, 7) = TdyDbl + 3 Or arrIn(Rw, 9) = TdyDbl + 3 Or arrIn(Rw, 11) = TdyDbl + 3 Then
Dim strRws As String 'String of rows for criteria met in G Or I Or K
Let strRws = strRws & " " & Rw
Else ' No "3 days before due service date" criteria met for this row
End If
Next Rw
If strRws = "" Then Exit Sub ' case no criteria met for the day this workbook was opened.
Let strRws = VBA.Strings.Mid$(strRws, 2) ' take off first space
'4b) Array of rows
Dim arrRws() As String: Let arrRws() = VBA.Strings.Split(strRws, " ", -1, vbBinaryCompare)
Rem 5 HTML Table of required output '
Dim ProTble As String
'5a) Table start
Let ProTble = _
"<table width=520>" & vbCrLf & _
"<col width=30>" & vbCrLf & _
"<col width=150>" & vbCrLf & _
"<col width=150>" & vbCrLf & _
"<col width=150>" & vbCrLf & _
"<col width=40>" & vbCrLf & vbCrLf
'5b) data rows
Dim iCnt As Long, jCntStear As Variant, jCnt As Long ' data "columns" , "rows"
For Each jCntStear In arrRws() ' To Loop for all rows meeting criteria
Let jCnt = jCnt + 1 ' Rows count for table to send
Dim LisRoe As String
Let LisRoe = LisRoe & "<tr height=16>" & vbCrLf
For iCnt = 1 To 5
Let LisRoe = LisRoe & "<td>" & arrIn(arrRws(jCnt - 1), iCnt) & "</td>" & vbCrLf ' -1 is because Split Function returns array of string types in 1 Dimensional array starting at indice 0, so our jCnt is one too big
Next iCnt
Let LisRoe = LisRoe & "</tr>" & vbCrLf & vbCrLf
Let ProTble = ProTble & LisRoe
Let LisRoe = ""
Next jCntStear
Let ProTble = ProTble & "</table>" ' table end
Debug.Print ProTble
Rem 6 EMail send 'For info see: http://www.excelfox.com/forum/showthread.php/2233-Urgent-support-needed-Multiple-emails-multiple-Excel-workbooks-at-once#post10519
'Working at my end With my With End With Created LCDCW Library, (LCD 1.0 Library ) (Linking Configuration Data_Cods Wollups)
With CreateObject("CDO.Message") ' -Linking Cods Wollups--------
Dim LCD_CW As String: Let LCD_CW = "http://schemas.microsoft.com/cdo/configuration/"
.Configuration(LCD_CW & "smtpusessl") = True '
.Configuration(LCD_CW & "smtpauthenticate") = 1 '
' ' Sever info
.Configuration(LCD_CW & "smtpserver") = "smtp.gmail.com" ' "securesmtp.t-online.de" "smtp.mail.yahoo.com" "smtp.live.com" "pod51017.outlook.com" "smtp-mail.outlook.com" "smtp.live.com" "securesmtp.t-online.de"
' The mechanism to use to send messages.
.Configuration(LCD_CW & "sendusing") = 2 ' Based on the LCD_OLE Data Base of type DBTYPE_I4
.Configuration(LCD_CW & "smtpserverport") = 25 ' 465 or 25 for t-online.de 'or 587 'or 25
'

.Configuration(LCD_CW & "sendusername") = "YourEMailAddress"
.Configuration(LCD_CW & "sendpassword") = "YourEMailPassword"
' Optional - How long to try
.Configuration(LCD_CW & "smtpconnectiontimeout") = 30 '
' Intraction protocol is Set/ Updated
.Configuration.Fields.Update '
'End With ' ---------------------- my Created LCDCW Library
'With ' --- ' Data to be sent------ my Created LCDCW Library
Dim strHTML As String: Let strHTML = ProTble 'ProTble(rngArr()) ' Let strHTML = RangetoHTML(rng)
' Dim Highway1 As Long: Let Highway1 = FreeFile(0) '
' Open ThisWorkbook.Path & "" & "jawaharse.txt" For Output As #Highway1 '
' Print #Highway1, strHTML
' Close #Highway1
.To = "Doc.AElstein@t-online.de" '
.cc = ""
.BCC = ""
.from = """Equipment- Maint Records.xlsm"" <YourEMailAddresseOrAnyCrap>"
.Subject = Ws.Range("A1").Value
.HTMLBody = strHTML
' .AddAttachment ThisWorkbook.Path & "\jawaharse.txt"
.Send ' Do it
End With ' CreateObject("CDO.Message") -----my Created LCDCW Library
End Sub

DocAElstein
05-24-2018, 01:24 PM
To support this Thread
http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email?p=10679#post10679

Re post code in Code tags, Like ....

Please use CODE TAGS if you are writing codes in your post.

To use code tags,
either
select your entire code and press the code tag button # in the editor below,
or
simply type your code as below


Your Code Here



Your Code Here







Private Sub cmdNot_Click()

Dim OutApp As Object
Dim OutMail As Object

…………………….

……………..

End Sub





BBCodeCodeTags.JPG : https://imgur.com/4HunNcs
2060

_.__________________

If you post using Code tags, then it will come out in the final post in a Code Window, like this:

Private Sub cmdNot_Click()
Dim OutApp As Object
Dim OutMail As Object
Dim fileName As String
Dim mSubject As String
Dim signature As String
Dim fname As String
Dim mBody As String
Dim rng As Range
Dim rng1 As Range
Dim ws As Worksheet
Dim mailTo As String
Set ws = Sheets("MRO")
fname = ws.Range("B4")
mSubject = "MRO " & " For " & Range("C6").Value
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'mBody = "2-SO\Material Request Form .xlsm"

Dim Path As String

mBody = "<font size=""3"" face=""Calibri"">" & _
"Dear Team,<br><br>" & _
"Please open the file from below link and put your signature on the respective cell after you completed your task.<br><B>" & _
fileName & ".xlsm" & "</B> is created.<br>" & _
"Click on this link to open the file : " & _
"<A HREF=""file://" & Path & fileName & ".xlsm" & _
""">Files are saved here</A>" & "-->" & Range("C6").Value & _
"<br><br>Best Regards," & _
"<br><br></font>"

With OutMail
.display
End With
signature = OutMail.body
With Application
.EnableEvents = False
.ScreenUpdating = False
End With

With OutMail
'.To = "email"
.To = ""
.CC = ""
.BCC = ""
.Subject = mSubject
'.body = "Dear Team," & vbCrLf & vbCrLf & "Please open the file from below link and put your signature on the respective cell and save the sheet"
'.htmlbody = RangetoHTML(rng)
.htmlbody = mBody
'.Attachments.Add fileName
.display
End With
'ws.PageSetup.RightHeader = "&""Calibri,italic""&11& " & ws.Range("A1")
ActiveWorkbook.Close False
ActiveWorkbook.Close
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing

With Application
.ScreenUpdating = True
.EnableEvents = True
End With

DocAElstein
06-02-2018, 11:30 AM
Code in code tags from here:
http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email?p=10699#post10699


Dim OutApp As Object
Dim OutMail As Object
Dim fileName As String
Dim mSubject As String
Dim signature As String
Dim fname As String
Dim mBody As String
Dim rng As Range
Dim rng1 As Range
Dim ws As Worksheet
Dim mailTo As String
fname = ws.Range("A1")
mSubject = "Equipment" & " For " & Range("A1").Value
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'mBody = "Z:\2\Form\\Manufacturing Order.xlsm"

Dim Path As String
ws.Protect ("Equipment")
Path = "\\Equipment- Maint RecordsThai1.xlsm"
mBody = "<font size=""3"" face=""Calibri"">" & _
"Dear Team,<br><br>" & _
"Please open the file from below link and change the date on the respective cell after you completed your task.<br><B>" & _
fileName & ".xlsm" & "</B> is created.<br>" & _
"Click on this link to open the file : " & _
"<A HREF=""file://" & Path & fileName & ".xlsm" & _
""">Files are saved here</A>" & "-->" & Range("A1").Value & _
"<br><br>Best Regards," & _
"<br><br></font>"

With OutMail
.display
End With
signature = OutMail.body
With Application
.EnableEvents = False
.ScreenUpdating = False
End With







Private Sub cmdNot_Click()
If Application.UserName = "Thai Nguyen" Then
Dim ws As Worksheet: Set ws = Sheets("Name")
Dim rng As Range, rng1 As Range
Dim fileName As String, fname As String
Let fname = ws.Range("B4")
Let mSubject = "Name"
Dim OutApp As Object, OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim Subject As String, signature As String, mBody As String, mailTo As String
'mBody = "copy you link path in here"
Let mBody = "<font size=""3"" face=""Calibri"">" & _
"Hi Team,<br><br>" & _
"Please open the file from below link and put your signature on the respective cell after you completed your task.<br><B>" & _
ActiveWorkbook.Name & "</B> is created.<br>" & _
"Click on this link to open the file : " & _
"<A HREF=""file://" & ActiveWorkbook.FullName & """>Link to the file</A>" & _
"<br><br>Regards," & _
"<br><br>Thai Nguyen</font> "
OutMail.display
Let signature = OutMail.body
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
With OutMail
'.To = "email"
If ws.Range("EU16") = True Then
Let mailTo = mailTo + "Thai Nguyen;"
Else
End If
If ws.Range("EU17") = True Then
mailTo = mailTo + "email"
End If
If ws.Range("EU18") = True Then
Let mailTo = mailTo + "email"
End If
If ws.Range("EU19") = True Then
Let mailTo = mailTo + "email"
End If
.To = mailTo
.CC = "Thai Nguyen"
.BCC = ""
.Subject = mSubject
'.body = "Hi Team," & vbCrLf & vbCrLf & "Please open the file from below link and put your signature on the respective cell and save the sheet"
'.htmlbody = RangetoHTML(rng)
.htmlbody = mBody
'.Attachments.Add fileName
.display
End With
'ws.PageSetup.RightHeader = "&""Calibri,italic""&11& " & ws.Range("A1")
ws.Protect ("Name")
ActiveWorkbook.Save
ActiveWorkbook.Close
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
Else
MsgBox "You are not authorised to send BOM form, please check with BOM owner"
End If
End Sub

DocAElstein
06-22-2018, 10:34 AM
Share account for testing file access from a hyperlink in a received EMail
In support of a possible solution to this post in this Thread:
http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email?p=10724#post10724

It is required to have a simple hyperlink to an Excel File appear in the received Email sent to members of a team.
I am not sure currently how to get a link directly to the File.

An second alternative involves storing the file at a File sharing site and using the link to the file as the URL part of a hyperlink.

This post discusses the setting up of such an account to allow storing of, and sharing via a supplied link to, the file.

As an example of a file sharing site we consider the free version of box.net
Some googling my be needed to finally get at the free version which may go under the name of “free” , “Individual rate”, “Personal free”
Currently you need to find your way to the free 10GB offer. This is currently at this link:
https://account.box.com/signup/n/personal#fbms6
Free10GB box net account register.JPG : https://imgur.com/NB3GThi
Note , by registering, you can choose a language to suit you.
Free10GB Select language .JPG : : https://imgur.com/aNzW1kq
( You can change the language to a different one after registering also
Free10GB Change language .JPG : https://imgur.com/IosqbAI )


For this registering , I use the created gmail account used for experiments in the current thread which this post supports, excellearning12@gmail.com ( excelfox Thread : http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email )

The password I pass on privately to those needing
Free10GB box net account register 2.JPG : https://imgur.com/Y2pLogO
Free10GB box net account register 3.JPG : https://imgur.com/QhCR8fP
Free10GB box net account register Verify Email 4.JPG : https://imgur.com/ffG7erw

Various steps are then gone through, they may be slightly different to the following:

At some point you should you should see the possibility to upload a file, following steps similar to these:
Free10GB box net 5 .JPG : https://imgur.com/lNWvQwF
To upload a file and get a URL link to use in a hyperlink to it:
Upload Files:
Free10GB box net 6 .JPG : https://imgur.com/rTU1Xbk
Select a file:
Free10GB box net 7 .JPG : https://imgur.com/wKKlqoO
Select share to obtain a URL link to the file :
Free10GB box net 8 .JPG : https://imgur.com/R3VbyhR
Copy link to be used in Hyperlink :
Free10GB box net 9 .JPG : https://imgur.com/8yaYwaK

DocAElstein
06-30-2018, 02:36 PM
Testing codes in support of this Thread
http://www.excelfox.com/forum/showthread.php/2253-Automatic-sort-due-date-and-send-email?p=10727#post10727







Codes for Alf and sandy666


Option Explicit
Sub SendfromExcelVBAExpgmail()
Rem 6 EMail send 'For info see: http://www.excelfox.com/forum/showthread.php/2233-Urgent-support-needed-Multiple-emails-multiple-Excel-workbooks-at-once#post10519
'Working at my end With my With End With Created LCDCW Library, (LCD 1.0 Library ) (Linking Configuration Data_Cods Wollups)
'6a(i)
With CreateObject("CDO.Message") ' -Linking Cods Wollups--------
Dim LCD_CW As String: Let LCD_CW = "http://schemas.microsoft.com/cdo/configuration/"
.Configuration(LCD_CW & "smtpusessl") = True '
.Configuration(LCD_CW & "smtpauthenticate") = 1 '
' ' Sever info
.Configuration(LCD_CW & "smtpserver") = "smtp.gmail.com" ' "smtp.office365.com" ' "smtp.live.com" ' "smtp-mail.outlook.com" ' "smtp.live.com" ' "smtp.gmail.com" ' "securesmtp.t-online.de" "smtp.mail.yahoo.com" "smtp.live.com" "pod51017.outlook.com" "smtp-mail.outlook.com" "smtp.live.com" "securesmtp.t-online.de"
' The mechanism to use to send messages.
.Configuration(LCD_CW & "sendusing") = 2 ' Based on the LCD_OLE Data Base of type DBTYPE_I4
.Configuration(LCD_CW & "smtpserverport") = 465 ' 465 or 25 for gmail '587 ' 25 ' 465 or 25 for t-online.de 'or 587 'or 25
'
.Configuration(LCD_CW & "sendusername") = "ExcelVBAExp@gmail.com" '
.Configuration(LCD_CW & "sendpassword") = "xxxxxxxxxxxxxx" ' '
' .Configuration(LCD_CW & "sendusername") = "YourEMailAddress"
' .Configuration(LCD_CW & "sendpassword") = "YourEMailPassword"
' Optional - How long to try
.Configuration(LCD_CW & "smtpconnectiontimeout") = 30 '
' Intraction protocol is Set/ Updated
.Configuration.Fields.Update '
'End With 6a(i)' ---------------------- my Created LCDCW Library
'6a(ii) With ' -- ' Data to be sent--- my Created LCDCW Library
Dim strHTML As String: Let strHTML = "<font size=""3"" face=""Calibri"">" & _
"This is sent from EMail account:" & _
"<br>Username: ""ExcelVBAExp@gmail.com""" & _
"<br>Password: ""xxxxxxxxxxxxxxxxxxxxxx""" & _
"<br><br>" & _
"<br>Please click on the 5 links below and tell me what happens, thanks!" & _
"<br>1 <A HREF=""https://app.box.com/s/x01liz3ralbdrt152i52fpwb0wx40ff3"">link to box net cloud free file sharing</A>" & _
"<br>2 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>3 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>4 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>" & _
"<br>5 <A HREF=""file:///" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>"
.To "xxxxxxxxxxxxxx"
.CC "xxxxxxxxxxxxxa"

.BCC = ""
.from = """ExcelVBAExp@gmail.com"" <ExcelVBAExp@gmail.com>"
.Subject = "Sent from EMail address: ExcelVBAExp@gmail.com"
.htmlbody = strHTML

.Send ' Do it
End With ' 6a(ii) CreateObject("CDO.Message") ---my Created LCDCW Library
End Sub

Sub SendfromFahrradprinzessinunterwegsgmail()
Rem 6 EMail send 'For info see: http://www.excelfox.com/forum/showthread.php/2233-Urgent-support-needed-Multiple-emails-multiple-Excel-workbooks-at-once#post10519
'Working at my end With my With End With Created LCDCW Library, (LCD 1.0 Library ) (Linking Configuration Data_Cods Wollups)
'6a(i)
With CreateObject("CDO.Message") ' -Linking Cods Wollups--------
Dim LCD_CW As String: Let LCD_CW = "http://schemas.microsoft.com/cdo/configuration/"
.Configuration(LCD_CW & "smtpusessl") = True '
.Configuration(LCD_CW & "smtpauthenticate") = 1 '
' ' Sever info
.Configuration(LCD_CW & "smtpserver") = "smtp.gmail.com" ' "smtp.office365.com" ' "smtp.live.com" ' "smtp-mail.outlook.com" ' "smtp.live.com" ' "smtp.gmail.com" ' "securesmtp.t-online.de" "smtp.mail.yahoo.com" "smtp.live.com" "pod51017.outlook.com" "smtp-mail.outlook.com" "smtp.live.com" "securesmtp.t-online.de"
' The mechanism to use to send messages.
.Configuration(LCD_CW & "sendusing") = 2 ' Based on the LCD_OLE Data Base of type DBTYPE_I4
.Configuration(LCD_CW & "smtpserverport") = 465 ' 465 or 25 for gmail '587 ' 25 ' 465 or 25 for t-online.de 'or 587 'or 25
'
.Configuration(LCD_CW & "sendusername") = "Fahrradprinzessinunterwegs@gmail.com" '
.Configuration(LCD_CW & "sendpassword") = "xxxxxxxxxxxxx" ' '
' .Configuration(LCD_CW & "sendusername") = "YourEMailAddress"
' .Configuration(LCD_CW & "sendpassword") = "YourEMailPassword"
' Optional - How long to try
.Configuration(LCD_CW & "smtpconnectiontimeout") = 30 '
' Intraction protocol is Set/ Updated
.Configuration.Fields.Update '
'End With 6a(i)' ---------------------- my Created LCDCW Library
'6a(ii) With ' -- ' Data to be sent--- my Created LCDCW Library
Dim strHTML As String: Let strHTML = "<font size=""3"" face=""Calibri"">" & _
"This is sent from EMail account:" & _
"<br>Username: ""Fahrradprinzessinunterwegs@gmail.com""" & _
"<br>Password: ""xxxxxxxxxxxxxxxxxxx""" & _
"<br><br>" & _
"<br>Please click on the 5 links below and tell me what happens, thanks!" & _
"<br>1 <A HREF=""https://app.box.com/s/x01liz3ralbdrt152i52fpwb0wx40ff3"">link to box net cloud free file sharing</A>" & _
"<br>2 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>3 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>4 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>" & _
"<br>5 <A HREF=""file:///" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>"
.To "xxxxxxxxxxxxxxxxxxxx"
.CC "xxxxxxxxxxxxxxxxxxx"
.BCC = ""
.from = """Fahrradprinzessinunterwegs@gmail.com"" <Fahrradprinzessinunterwegs@gmail.com>"
.Subject = "Sent from EMail address: Fahrradprinzessinunterwegs@gmail.com"
.htmlbody = strHTML

.Send ' Do it
End With ' 6a(ii) CreateObject("CDO.Message") ---my Created LCDCW Library
End Sub



Sub SendfromDocAlnsteinGermanTelekom()
Rem 6 EMail send 'For info see: http://www.excelfox.com/forum/showthread.php/2233-Urgent-support-needed-Multiple-emails-multiple-Excel-workbooks-at-once#post10519
'Working at my end With my With End With Created LCDCW Library, (LCD 1.0 Library ) (Linking Configuration Data_Cods Wollups)
'6a(i)
With CreateObject("CDO.Message") ' -Linking Cods Wollups--------
Dim LCD_CW As String: Let LCD_CW = "http://schemas.microsoft.com/cdo/configuration/"
.Configuration(LCD_CW & "smtpusessl") = True '
.Configuration(LCD_CW & "smtpauthenticate") = 1 '
' ' Sever info
.Configuration(LCD_CW & "smtpserver") = "securesmtp.t-online.de" ' "smtp.gmail.com" ' "smtp.office365.com" ' "smtp.live.com" ' "smtp-mail.outlook.com" ' "smtp.live.com" ' "smtp.gmail.com" ' "securesmtp.t-online.de" "smtp.mail.yahoo.com" "smtp.live.com" "pod51017.outlook.com" "smtp-mail.outlook.com" "smtp.live.com" "securesmtp.t-online.de"
' The mechanism to use to send messages.
.Configuration(LCD_CW & "sendusing") = 2 ' Based on the LCD_OLE Data Base of type DBTYPE_I4
.Configuration(LCD_CW & "smtpserverport") = 465 ' 465 or 25 for gmail '587 ' 25 ' 465 or 25 for t-online.de 'or 587 'or 25
'
.Configuration(LCD_CW & "sendusername") = "Doc.Alnstein@t-online.de" '
.Configuration(LCD_CW & "sendpassword") = "xxxxxxxxx" ' '
' .Configuration(LCD_CW & "sendusername") = "YourEMailAddress"
' .Configuration(LCD_CW & "sendpassword") = "YourEMailPassword"
' Optional - How long to try
.Configuration(LCD_CW & "smtpconnectiontimeout") = 30 '
' Intraction protocol is Set/ Updated
.Configuration.Fields.Update '
'End With 6a(i)' ---------------------- my Created LCDCW Library
'6a(ii) With ' -- ' Data to be sent--- my Created LCDCW Library
Dim strHTML As String: Let strHTML = "<font size=""3"" face=""Calibri"">" & _
"This is sent from EMail account:" & _
"<br>Username: ""Doc.Alnstein@t-online.de""" & _
"<br>Password: ""xxxxxxxxxxx""" & _
"<br><br>" & _
"<br>Please click on the 5 links below and tell me what happens, thanks!" & _
"<br>1 <A HREF=""https://app.box.com/s/x01liz3ralbdrt152i52fpwb0wx40ff3"">link to box net cloud free file sharing</A>" & _
"<br>2 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>3 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>4 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>" & _
"<br>5 <A HREF=""file:///" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>"
.To "xxxxxxxxxxxxxxxxxxxxxxxx"
.CC "xxxxxxxxxxxxxxxxxxxxxxxxx"

.BCC = ""
.from = """Doc.Alnstein@t-online.de"" <Doc.Alnstein@t-online.de>"
.Subject = "Sent from EMail address: Doc.Alnstein@t-online.de"
.htmlbody = strHTML

.Send ' Do it
End With ' 6a(ii) CreateObject("CDO.Message") ---my Created LCDCW Library
End Sub

Instructions:
Three files are attached. Please download them and store them all somewhere on your computer. They can be stored anywhere, but important is that they are all stored in the same Folder :
All 3 files stored in same place.JPG : https://imgur.com/rFu0TML

Please open only one file “Test File xxxx to send EMail containing Hyperlinks to Files.xlsm”
Enable macros.

There are three codes in file “Test File xxxx to send EMail containing Hyperlinks to Files.xlsm”.
The codes are very similar, differing only in the Email account used as the .Sender:
Sub SendfromDocAlnsteinGermanTelekom()
Sub SendfromFahrradprinzessinunterwegsgmail()
Sub SendfromExcelVBAExpgmail()

Please try to run those codes.
Each code should send you an Email which on arrival will look something similar to this:
Typical received EMail.JPG : https://imgur.com/4oNXNtW

Please click on the 5 Hyperlinks and tell me what happens.


My final goal is to get a Hyperlink which when clicked opens an Excel or Word File.
I have tested the codes sending to my gmail and German Telekom Email accounts.
But so far, only link 1 works. But link 1 does not open a file: It simply sends you to a file sharing site. So link 1 is a temporary solution for me.









Code for Thai in next post....

DocAElstein
07-01-2018, 02:17 PM
Code for Thai .


Option Explicit
Sub Sendfromexcellearninggmail()
Rem 6 EMail send 'For info see: http://www.excelfox.com/forum/showthread.php/2233-Urgent-support-needed-Multiple-emails-multiple-Excel-workbooks-at-once#post10519
'Working at my end With my With End With Created LCDCW Library, (LCD 1.0 Library ) (Linking Configuration Data_Cods Wollups)
'6a(i)
With CreateObject("CDO.Message") ' -Linking Cods Wollups--------
Dim LCD_CW As String: Let LCD_CW = "http://schemas.microsoft.com/cdo/configuration/"
.Configuration(LCD_CW & "smtpusessl") = True '
.Configuration(LCD_CW & "smtpauthenticate") = 1 '
' ' Sever info
.Configuration(LCD_CW & "smtpserver") = "smtp.gmail.com" ' "smtp.office365.com" ' "smtp.live.com" ' "smtp-mail.outlook.com" ' "smtp.live.com" ' "smtp.gmail.com" ' "securesmtp.t-online.de" "smtp.mail.yahoo.com" "smtp.live.com" "pod51017.outlook.com" "smtp-mail.outlook.com" "smtp.live.com" "securesmtp.t-online.de"
' The mechanism to use to send messages.
.Configuration(LCD_CW & "sendusing") = 2 ' Based on the LCD_OLE Data Base of type DBTYPE_I4
.Configuration(LCD_CW & "smtpserverport") = 465 ' 465 or 25 for gmail '587 ' 25 ' 465 or 25 for t-online.de 'or 587 'or 25
'
.Configuration(LCD_CW & "sendusername") = "excellearning12@gmail.com" '
.Configuration(LCD_CW & "sendpassword") = "xxxxxxxxxxxxx" ' '
' .Configuration(LCD_CW & "sendusername") = "YourEMailAddress"
' .Configuration(LCD_CW & "sendpassword") = "YourEMailPassword"
' Optional - How long to try
.Configuration(LCD_CW & "smtpconnectiontimeout") = 30 '
' Intraction protocol is Set/ Updated
.Configuration.Fields.Update '
'End With 6a(i)' ---------------------- my Created LCDCW Library
'6a(ii) With ' -- ' Data to be sent--- my Created LCDCW Library
Dim strHTML As String: Let strHTML = "<font size=""3"" face=""Calibri"">" & _
"This is sent from EMail account:" & _
"<br>Username: ""excellearning12@gmail.com""" & _
"<br>Password: ""xxxxxxxxxxxxx""" & _
"<br><br>" & _
"<br>Please click on the 5 links below and tell me what happens, thanks!" & _
"<br>1 <A HREF=""https://app.box.com/s/x01liz3ralbdrt152i52fpwb0wx40ff3"">link to box net cloud free file sharing</A>" & _
"<br>2 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>3 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received EMail.htm"""">htm file on your computer</A>" & _
"<br>4 <A HREF=""file://" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>" & _
"<br>5 <A HREF=""file:///" & ThisWorkbook.Path & "\" & "Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls"""">empty xls file on your computer</A>"
.To = "THai xxxxxxxxx"
'.CC = "xxxxxxxxxxxxx"
.BCC = ""
.from = """excellearning12@gmail.com"" <excellearning12@gmail.com>"
.Subject = "Sent from EMail address: excellearning12@gmail.com"
.htmlbody = strHTML

.Send ' Do it
End With ' 6a(ii) CreateObject("CDO.Message") ---my Created LCDCW Library
End Sub

Testing files( sent privately ) :
I have also posted 3 files to you using our share g mail account , ExcelVBAExp@gmail.com
Please can you also try out the test…

Please do the following.

_1) Download all three files , and important: All must be stored in the same Folder.
( the three files are:
Test file DOThtm to be stored on your computer to try to open with a Hyperlink in a received Email.htm
Empty test file DOTxls stored on your computer to try to open from Hyperlink in arrived Email.xls
Test File Thai to send EMail containing Hyperlinks to Files.xlsm )

_2) Open only file Test File Thai to send EMail containing Hyperlinks to Files.xlsm
Run code Sub Sendfromexcellearninggmail()

You should receive an Email similar to these:
Alan 5 Links in German Telekom.JPG : https://imgur.com/LeASbhf
2079
Alan 5 Links in gmail.JPG : https://imgur.com/0sdyZEj
2080

_3) Please click on the links.

_4) Please reply and tell me what happens when you click each link

Thanks
Alan

DocAElstein
07-07-2018, 01:37 PM
First test code for solution to this thread:
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs

( Run code Sub TestieCalls() )



Option Explicit
Sub TestieCalls()
Call Testie(Worksheets("Sheet1"), Worksheets("Sheet2"))
End Sub
Sub Testie(Ws1 As Worksheet, Ws2 As Worksheet)
Rem 1 Worksheet data info
'1a capture data
'1a(i) last data rows
Dim lr1_1 As Long, Lr1_2 As Long, Lr2_1 As Long, Lr2_2 As Long, Lr1 As Long, lr2 As Long
Let lr1_1 = Ws1.Cells(Rows.Count, 1).End(xlUp).row
Let Lr1_2 = Ws1.Cells(Rows.Count, 2).End(xlUp).row: Lr2_1 = Ws2.Cells(Rows.Count, 1).End(xlUp).row: Lr2_2 = Ws2.Cells(Rows.Count, 2).End(xlUp).row
If lr1_1 > Lr1_2 Then
Let Lr1 = lr1_1
Else
Let Lr1 = Lr1_2
End If
Let lr2 = Lr2_2: If Lr2_1 > Lr2_2 Then Let lr2 = Lr2_1
'1a(ii) capture data into arrays in one go
Dim arrSht1() As Variant, arrSht2() As Variant
Let arrSht1() = Ws1.Range("A1:B" & Lr1 & "").Value
Let arrSht2() = Ws2.Range("A1:B" & lr2 & "").Value
Rem 2 arrays for check and output
Dim arrSht1b() As String, arrOut() As String
'2a size arrays to that of sheet 2 data
ReDim arrSht1b(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
ReDim arrOut(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
'2b fill modified sheet 1 array, arrSht1b() , initially with sheet 1 data
Dim Cnt As Long
For Cnt = 1 To UBound(arrSht1(), 1) Step 1
Let arrSht1b(Cnt, 1) = arrSht1(Cnt, 1): Let arrSht1b(Cnt, 2) = arrSht1(Cnt, 2)
Next Cnt
Rem 3 main loop ' == Start main loop ==========
For Cnt = 1 To UBound(arrSht2(), 1) - 1 Step 1 ' Counting at each row
Dim DifCnt As Long 'Count of different cells
' Condition check
If (arrSht2(Cnt, 1) <> arrSht1b(Cnt, 1) Or arrSht2(Cnt, 2) <> arrSht1b(Cnt, 2)) And (arrSht2(Cnt + 1, 1) = arrSht1b(Cnt + 1, 1) And arrSht2(Cnt + 1, 2) = arrSht1b(Cnt + 1, 2)) Then ' condition for changed row but next row is as previous : row had data changed, but a row was not inserted
Let arrSht1b(Cnt, 1) = arrSht2(Cnt, 1): arrSht1b(Cnt, 2) = arrSht2(Cnt, 2) 'change any changed cell
If arrSht1b(Cnt, 1) <> arrSht1(Cnt, 1) Then
Let arrOut(Cnt, 1) = arrSht1b(Cnt, 1) & " <> " & arrSht1(Cnt, 1)
Let DifCnt = DifCnt + 1
Else: End If
If arrSht1b(Cnt, 2) <> arrSht1(Cnt, 2) Then
Let arrOut(Cnt, 2) = arrSht1b(Cnt, 2) & " <> " & arrSht1(Cnt, 2)
Let DifCnt = DifCnt + 1
Else: End If
' Condition check
ElseIf ((arrSht2(Cnt, 1) <> arrSht1b(Cnt, 1) Or arrSht2(Cnt, 2) <> arrSht1b(Cnt, 2)) And (arrSht2(Cnt + 1, 1) <> arrSht1b(Cnt + 1, 1) Or arrSht2(Cnt + 1, 2) <> arrSht1b(Cnt + 1, 2))) Then ' main condition suggesting added new row
Dim AdedRows As Long: Let AdedRows = AdedRows + 1
'3b we need to shift all data down to allow space for new row in arrSht2()
Dim CntIn As Long
For CntIn = (UBound(arrSht2(), 1) - 1) To Cnt Step -1 'loop for all but last from this row
Let arrSht1b(CntIn + 1, 1) = arrSht1b(CntIn, 1): arrSht1b(CntIn + 1, 2) = arrSht1b(CntIn, 2) ' This effectively pulls up each row by one
Next CntIn
'3c add the new data to the modified array, Let arrSht1b()
Let arrSht1b(Cnt, 1) = arrSht2(Cnt, 1): arrSht1b(Cnt, 2) = arrSht2(Cnt, 2)
If arrSht1b(Cnt, 1) = "" Then arrSht1b(Cnt, 1) = " " ' Just to make final output more neat
If arrSht1b(Cnt, 2) = "" Then arrSht1b(Cnt, 2) = " "
'3d add info to the output array
If Cnt > UBound(arrSht1(), 1) Then ' case of new lines
Let arrOut(Cnt, 1) = "An new extra line contains " & arrSht1b(Cnt, 1): arrOut(Cnt, 2) = "An new extra line contains " & arrSht1b(Cnt, 2)

Else
If arrSht1b(Cnt, 1) <> arrSht1(Cnt, 1) Then
Let arrOut(Cnt, 1) = arrSht1b(Cnt, 1) & " <> " & arrSht1(Cnt, 1)
Let DifCnt = DifCnt + 1
Else: End If
If arrSht1b(Cnt, 2) <> arrSht1(Cnt, 2) Then
Let arrOut(Cnt, 2) = arrSht1b(Cnt, 2) & " <> " & arrSht1(Cnt, 2)
Let DifCnt = DifCnt + 1
Else: End If
End If
'
Let Cnt = Cnt + 1 ' we need to skip the next row as that was just effectively added so we are done with it
Else ' row has not been added here

End If
Next Cnt ' ========= End main loop ==========
Rem 4 last row may be new
If arrSht2(lr2, 1) <> arrSht1(Lr1, 1) Or arrSht2(lr2, 2) <> arrSht1(Lr1, 2) Then ' either cell in last row is different
If arrSht2(lr2, 1) <> arrSht1(Lr1, 1) Then
Let arrOut(lr2, 1) = arrSht2(lr2, 1) & " on last row is new"
Let DifCnt = DifCnt + 1
Else: End If
If arrSht2(lr2, 2) <> arrSht1(Lr1, 2) Then
Let arrOut(lr2, 2) = arrSht2(lr2, 2) & " on last row is new"
Let DifCnt = DifCnt + 1
Else: End If
Else 'last row on sheet2 is as on sheet1
End If
Rem 5 Output in new file For testing purposes, I give the output in a third worksheet, Tabelle3
Dim Ws3 As Worksheet: Set Ws3 = ThisWorkbook.Worksheets("Tabelle3")
Ws3.Cells.ClearContents
Let Ws3.Range("A1:B1").Value = "Sheet1": Ws3.Range("C1:D1").Value = "Test Output": Ws3.Range("E1:F1").Value = "Sheet2"
Let Ws3.Range("A2").Resize(UBound(arrSht1(), 1), UBound(arrSht1(), 2)).Value = arrSht1()
Let Ws3.Range("C2").Resize(UBound(arrOut(), 1), UBound(arrOut(), 2)).Value = arrOut()
Let Ws3.Range("E2").Resize(UBound(arrSht2(), 1), UBound(arrSht2(), 2)).Value = arrSht2()
Ws3.Columns.AutoFit
Rem 6 MsgBoox output
MsgBox Prompt:="inserted lines is " & AdedRows & vbCrLf & "Changed cells is " & DifCnt
End Sub

DocAElstein
07-19-2018, 02:24 PM
Test runs from code
Sub TestyCalls() ' http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741
' Call Testie(Worksheets("Sheet1"), Worksheets("Sheet2"))
Call Testy(Worksheets("Sheet1"), Worksheets("Sheet2"))
End Sub


For support of this excelfox Thread:
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741

Using Excel 2007 32 bit

Sheet1Sheet1Test OutputTest OutputSheet2Sheet2

Customer Assembly Customer Assembly

Nu Torque
13456Nu Torque
13456

Blu OriginSpaceshipBlu OriginSpaceship

Jet Blue21ABC

Alaska
789

ToyotaSupra

EmirateABC12345







Jet Blue21ABC

Alaska
789

ToyotaSupra

EmirateABC12345

Dup 2 of ToyotaDup 2 of SupraToyotaSupra

Dup 2 of EmirateDup 2 of ABC12345EmirateABC12345

Spaceship12Spaceship
12
Worksheet: Tabelle3


Using Excel 2007 32 bit

Sheet1Sheet1Test OutputTest OutputSheet2Sheet2

Customer Assembly Customer Assembly

Nu Torque
13456Nu Torque
13456

Blu OriginSpaceshipAlaska
789

Jet Blue21ABCExcel123HiThaiExcel123HiThai

Alaska
789Blu OriginSpaceship

ToyotaSupraEmirateABC12345

EmirateABC12345Jet Blue21ABC

ToyotaSupra
Worksheet: Tabelle3

DocAElstein
07-19-2018, 02:40 PM
Code in support of this Post
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741


Sub TestyCalls() ' http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741
' Call Testie(Worksheets("Sheet1"), Worksheets("Sheet2"))
Call Testy(Worksheets("Sheet1"), Worksheets("Sheet2"))
End Sub
Sub Testy(Ws1 As Worksheet, Ws2 As Worksheet)
Rem 1 Worksheet data info
'1a capture data
'1a(i) last data rows
Dim lr1_1 As Long, Lr1_2 As Long, Lr2_1 As Long, Lr2_2 As Long, Lr1 As Long, lr2 As Long
Let lr1_1 = Ws1.Cells(Rows.Count, 1).End(xlUp).row
Let Lr1_2 = Ws1.Cells(Rows.Count, 2).End(xlUp).row: Lr2_1 = Ws2.Cells(Rows.Count, 1).End(xlUp).row: Lr2_2 = Ws2.Cells(Rows.Count, 2).End(xlUp).row
If lr1_1 > Lr1_2 Then
Let Lr1 = lr1_1
Else
Let Lr1 = Lr1_2
End If
Let lr2 = Lr2_2: If Lr2_1 > Lr2_2 Then Let lr2 = Lr2_1
'1a(ii) capture data into arrays in one go
Dim arrSht1() As Variant, arrSht2() As Variant
Let arrSht1() = Ws1.Range("A1:B" & Lr1 & "").Value
Let arrSht2() = Ws2.Range("A1:B" & lr2 & "").Value
Rem 2 arrays for check and output
Dim arrSht1b() As String, arrOut() As String, arrSht1Chk() As String, arrSht2Chk() As String
'2a size arrays to that of sheet 2 data
' ReDim arrSht1b(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
ReDim arrOut(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
ReDim arrSht1Chk(1 To UBound(arrSht1(), 1)): ReDim arrSht2Chk(1 To UBound(arrSht2(), 1)) ' Arrays for concatenated data
'2b make check arrays fill modified sheet 1 array, arrSht1b() , initially with sheet 1 data
Dim Cnt As Long
For Cnt = 1 To UBound(arrSht1(), 1) Step 1
' Let arrSht1b(Cnt, 1) = arrSht1(Cnt, 1): Let arrSht1b(Cnt, 2) = arrSht1(Cnt, 2)
Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & "|" & arrSht1(Cnt, 2)
Next Cnt
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & "|" & arrSht2(Cnt, 2)
Next Cnt
'2c make contents of array for output initially all dat from Sheet2
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
Let arrOut(Cnt, 1) = CStr(arrSht2(Cnt, 1)): arrOut(Cnt, 2) = CStr(arrSht2(Cnt, 2))
Next Cnt
Rem 3 main loop ' == Start Main loop ================
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of Sheet2
Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
'3a action whilst match is found --Inner Loop------
Do While Not IsError(MtchRes) ' The 3a Loop
Dim DupyCnt As Long: Let DupyCnt = DupyCnt + 1
If DupyCnt > 1 Then
Let arrOut(MtchRes, 1) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 1): arrOut(MtchRes, 2) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 2)
Else
Let arrOut(MtchRes, 1) = "": arrOut(MtchRes, 2) = "" ' remove the found data from array for output so that next line can look again for a possible duplicate
End If
Let arrSht2Chk(MtchRes) = "" ' remove entry in check array so that next line can look for possible duplicate
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
Loop ' ----------------------------------------
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Sheet1
Next Cnt ' ========= End main loop ================= effectively we go to next row of data in Sheet1 with this line

Rem 5 Output in new file For testing purposes, I give the output in a third worksheet, Tabelle3
Dim Ws3 As Worksheet: Set Ws3 = ThisWorkbook.Worksheets("Tabelle3")
Ws3.Cells.ClearContents
Let Ws3.Range("A1:B1").Value = "Sheet1": Ws3.Range("C1:D1").Value = "Test Output": Ws3.Range("E1:F1").Value = "Sheet2"
Let Ws3.Range("A2").Resize(UBound(arrSht1(), 1), UBound(arrSht1(), 2)).Value = arrSht1()
Let Ws3.Range("C2").Resize(UBound(arrOut(), 1), UBound(arrOut(), 2)).Value = arrOut()
Let Ws3.Range("E2").Resize(UBound(arrSht2(), 1), UBound(arrSht2(), 2)).Value = arrSht2()
Ws3.Columns.AutoFit
Rem 6 MsgBox output
' MsgBox Prompt:="Inserted lines is " & AdedRows & vbCrLf & "Changed cells is " & DifCnt
End Sub

DocAElstein
07-23-2018, 03:57 PM
Code in support of this Post
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10745#post10745



Option Explicit
Sub TestyCalls() ' http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741
' Call Testie(Worksheets("Sheet1"), Worksheets("Sheet2"))
Call Testy(Worksheets("Sheet1"), Worksheets("Sheet2"))
End Sub
Sub Testy(Ws1 As Worksheet, Ws2 As Worksheet)
Rem 1 Worksheet data info
'1a capture data
'1a(i) last data rows
Dim lr1_1 As Long, Lr1_2 As Long, Lr2_1 As Long, Lr2_2 As Long, Lr1 As Long, lr2 As Long
Let lr1_1 = Ws1.Cells(Rows.Count, 1).End(xlUp).row
Let Lr1_2 = Ws1.Cells(Rows.Count, 2).End(xlUp).row: Lr2_1 = Ws2.Cells(Rows.Count, 1).End(xlUp).row: Lr2_2 = Ws2.Cells(Rows.Count, 2).End(xlUp).row
If lr1_1 > Lr1_2 Then
Let Lr1 = lr1_1
Else
Let Lr1 = Lr1_2
End If
Let lr2 = Lr2_2: If Lr2_1 > Lr2_2 Then Let lr2 = Lr2_1
'1a(ii) capture data into arrays in one go
Dim arrSht1() As Variant, arrSht2() As Variant
Let arrSht1() = Ws1.Range("A1:B" & Lr1 & "").Value
Let arrSht2() = Ws2.Range("A1:B" & lr2 & "").Value
Rem 2 arrays for check and output
Dim arrSht1b() As String, arrOut() As String, arrSht1Chk() As String, arrSht2Chk() As String, arrSht2ChkKopie() As String
'2a size arrays to that of sheet 2 data
' ReDim arrSht1b(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
ReDim arrOut(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
ReDim arrSht1Chk(1 To UBound(arrSht1(), 1))
ReDim arrSht2Chk(1 To UBound(arrSht2(), 1))
ReDim arrSht2ChkKopie(1 To UBound(arrSht2(), 1))
'2b make check arrays fill modified sheet 1 array, arrSht1b() , initially with sheet 1 data
Dim Cnt As Long
For Cnt = 1 To UBound(arrSht1(), 1) Step 1
' Let arrSht1b(Cnt, 1) = arrSht1(Cnt, 1): Let arrSht1b(Cnt, 2) = arrSht1(Cnt, 2)
Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & "|" & arrSht1(Cnt, 2)
Next Cnt
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & "|" & arrSht2(Cnt, 2)
Next Cnt
Let arrSht2ChkKopie() = arrSht2Chk() ' Arrays of same size and type can be assiigned too eachother
'2c make contents of array for output initially all dat from Sheet2
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
Let arrOut(Cnt, 1) = CStr(arrSht2(Cnt, 1)): arrOut(Cnt, 2) = CStr(arrSht2(Cnt, 2))
Next Cnt
Rem 3 main loop ' == Start Main loop ================
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of Sheet2
Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
' If IsError(MtchRes) Then ' case data is missing Sheet2 ( deleted ) ' This straight forward modification to the existing code will not work. This is because the code modifies the check array , arrSht2Chk() , when checking for the data from sheet1 in sheet2
' Let arrOut(Cnt, 1) = "Missing: " & arrSht1(Cnt, 1): arrOut(Cnt, 2) = "Missing: " & arrSht1(Cnt, 2)
' Else:
'3a(ii) action whilst match is found --Inner Loop------
Do While Not IsError(MtchRes) ' The 3a Loop
Dim DupyCnt As Long: Let DupyCnt = DupyCnt + 1
If DupyCnt > 1 Then
Let arrOut(MtchRes, 1) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 1): arrOut(MtchRes, 2) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 2)
Else
Let arrOut(MtchRes, 1) = "": arrOut(MtchRes, 2) = "" ' remove the found data from array for output so that next line can look again for a possible duplicate
End If
Let arrSht2Chk(MtchRes) = "" ' remove entry in check array so that next line can look for possible duplicate
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
Loop ' ----------------------------------------
' End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Sheet1
Next Cnt ' ========= End Main loop ================= effectively we go to next row of data in Sheet1 with this line
Rem 3b Second Loop ' ##### Start Second loop #####
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of Sheet2
'Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2ChkKopie, 0)
If IsError(MtchRes) Then ' case data is missing Sheet2 ( deleted )
Let arrOut(Cnt, 1) = "Missing: " & arrSht1(Cnt, 1): arrOut(Cnt, 2) = "Missing: " & arrSht1(Cnt, 2)
Else
End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Sheet1
Next Cnt ' ##### End Second Loop ################# effectively we go to next row of data in Sheet1 with this line


Rem 5 Output in new file For testing purposes, I give the output in a third worksheet, Tabelle3
Dim Ws3 As Worksheet: Set Ws3 = ThisWorkbook.Worksheets("Tabelle3")
Ws3.Cells.ClearContents
Let Ws3.Range("A1:B1").Value = "Sheet1": Ws3.Range("C1:D1").Value = "Test Output": Ws3.Range("E1:F1").Value = "Sheet2"
Let Ws3.Range("A2").Resize(UBound(arrSht1(), 1), UBound(arrSht1(), 2)).Value = arrSht1()
Let Ws3.Range("C2").Resize(UBound(arrOut(), 1), UBound(arrOut(), 2)).Value = arrOut()
Let Ws3.Range("E2").Resize(UBound(arrSht2(), 1), UBound(arrSht2(), 2)).Value = arrSht2()
Ws3.Columns.AutoFit
Rem 6 MsgBox output
' MsgBox Prompt:="Inserted lines is " & AdedRows & vbCrLf & "Changed cells is " & DifCnt
End Sub

DocAElstein
07-23-2018, 04:03 PM
Code in support of this Post
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10745#post10745




Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F

1Sheet1Sheet1Test OutputTest OutputSheet2Sheet2


2Customer Assembly Customer Assembly


3Nu Torque
13456Nu Torque
13456


4Blu OriginSpaceshipAlaska
789


5Jet Blue21ABCExcel123HiThaiExcel123HiThai


6Alaska
789Blu OriginSpaceship


7ToyotaSupraMissing: ToyotaMissing: SupraEmirateABC12345


8EmirateABC12345Jet Blue21ABC


9
Worksheet: Tabelle3

DocAElstein
07-26-2018, 02:33 PM
Results in support of answer to this post
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10749#post10749
( note a typo in your data for row 9 ( correspondingly output row 10 in these screenshots) : Angle is not Angel . hence this is taken by my code as Missing data row )

Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q

1OriginalOriginalOriginalOriginalOriginalOriginalT est OutputTest OutputTest OutputTest OutputTest OutputNEWNEWNEWNEWNEWNEW


2Assembly #:Assembly Name: Assembly Name: Assembly #:Assembly Name:


3Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PNCustomer PNInternal PNManufacture PNQty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


4
1Nu Torque
13456
456
45613456456456
1Nu Torque
13456
456
456


5
1Blu OriginSpaceship
457
457Spaceship457457
1Blu OriginSpaceship
457
457


6
2Jet Blue21ABC
458
458ABC458458
2Jet Blue21ABC
458
458


7
3EXCELL123
123ABCABCMISSING: 3MISSING: EXCELL123MISSING: 123MISSING: ABCMISSING: ABC
3Alaska
789
459
459


8
3ToyotaSupra
460
460Supra460460
3ToyotaSupra
460
460


9
2EmirateABC12345
461
461ABC12345461461
2EmirateABC12345
461
461


10
1AngelABC12346
462
462MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
1AngleABC12346
462
462
Worksheet: Result



Using Excel 2007 32 bit

OriginalOriginalOriginalOriginalOriginalOriginalTe st OutputTest OutputTest OutputTest OutputTest OutputNEWNEWNEWNEWNEWNEW

Assembly #:Assembly Name: Assembly Name: Assembly #:Assembly Name:

Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PNCustomer PNInternal PNManufacture PNQty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


1Nu Torque
13456
456
45613456456456
1Nu Torque
13456
456
456


1Blu OriginSpaceship
457
457Spaceship457457
1Blu OriginSpaceship
457
457


2Jet Blue21ABC
458
458ABC458458
2Jet Blue21ABC
458
458


3EXCELL123
123ABCABCMISSING: 3MISSING: EXCELL123MISSING: 123MISSING: ABCMISSING: ABC
3Alaska
789
459
459


3ToyotaSupra
460
460Supra460460
3ToyotaSupra
460
460


2EmirateABC12345
461
461ABC12345461461
2EmirateABC12345
461
461


1AngelABC12346
462
462MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
1AngleABC12346
462
462
Worksheet: Result

DocAElstein
07-26-2018, 02:43 PM
Code corresponding to last post, in support of answer to this post
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10749#post10749



Sub TestyCalls() ' http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741
' Call Testie(Worksheets("Original"), Worksheets("NEW"))
' Call Testy(Worksheets("Original"), Worksheets("NEW"))
Call Testies(Worksheets("Original"), Worksheets("NEW"))
End Sub
Sub Testies(Ws1 As Worksheet, Ws2 As Worksheet)
Rem 1 Worksheet data info
'1a capture data
'1a(i) last data rows
Dim lr1_1 As Long, Lr1_2 As Long, Lr2_1 As Long, Lr2_2 As Long, Lr1 As Long, lr2 As Long
Let lr1_1 = Ws1.Cells(Rows.Count, 1).End(xlUp).row
Let Lr1_2 = Ws1.Cells(Rows.Count, 2).End(xlUp).row: Lr2_1 = Ws2.Cells(Rows.Count, 1).End(xlUp).row: Lr2_2 = Ws2.Cells(Rows.Count, 2).End(xlUp).row
If lr1_1 > Lr1_2 Then
Let Lr1 = lr1_1
Else
Let Lr1 = Lr1_2
End If
Let lr2 = Lr2_2: If Lr2_1 > Lr2_2 Then Let lr2 = Lr2_1
'1a(ii) capture data into arrays in one go
Dim arrSht1() As Variant, arrSht2() As Variant
Let arrSht1() = Ws1.Range("B1:G" & Lr1 & "").Value
Let arrSht2() = Ws2.Range("B1:G" & Lr1 & "").Value
Rem 2 arrays for check and output
Dim arrSht1b() As String, arrOut() As String, arrSht1Chk() As String, arrSht2Chk() As String, arrSht2ChkKopie() As String
'2a size arrays to that of sheet 2 data
' ReDim arrSht1b(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
ReDim arrOut(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2) - 1) ' -1 as one column , D is not required
ReDim arrSht1Chk(1 To UBound(arrSht1(), 1))
ReDim arrSht2Chk(1 To UBound(arrSht2(), 1))
ReDim arrSht2ChkKopie(1 To UBound(arrSht2(), 1))
'2b make check arrays fill modified sheet 1 array, arrSht1b() , initially with sheet 1 data
Dim Cnt As Long
For Cnt = 1 To UBound(arrSht1(), 1) Step 1
' Let arrSht1b(Cnt, 1) = arrSht1(Cnt, 1): Let arrSht1b(Cnt, 2) = arrSht1(Cnt, 2)
' Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & "|" & arrSht1(Cnt, 2)
Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & "|" & arrSht1(Cnt, 2) & "|" & arrSht1(Cnt, 4) & "|" & arrSht1(Cnt, 5) & "|" & arrSht1(Cnt, 6)
Next Cnt
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
' Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & "|" & arrSht2(Cnt, 2)
Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & "|" & arrSht2(Cnt, 2) & "|" & arrSht2(Cnt, 4) & "|" & arrSht2(Cnt, 5) & "|" & arrSht2(Cnt, 6)
Next Cnt
Let arrSht2ChkKopie() = arrSht2Chk() ' Arrays of same size and type can be assiigned too eachother
'2c make contents of array for output initially all dat from NEW
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
Let arrOut(Cnt, 1) = CStr(arrSht2(Cnt, 1)): arrOut(Cnt, 2) = CStr(arrSht2(Cnt, 2)): arrOut(Cnt, 3) = CStr(arrSht2(Cnt, 4)):: arrOut(Cnt, 4) = CStr(arrSht2(Cnt, 5)):: arrOut(Cnt, 5) = CStr(arrSht2(Cnt, 6))
Next Cnt
Rem 3 main loop ' == Start Main loop ================
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of NEW
Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
' If IsError(MtchRes) Then ' case data is MISSING: NEW ( MISSING: ) ' This straight forward modification to the existing code will not work. This is because the code modifies the check array , arrSht2Chk() , when checking for the data from Original in NEW
' Let arrOut(Cnt, 1) = "Missing: " & arrSht1(Cnt, 1): arrOut(Cnt, 2) = "MISSING:: " & arrSht1(Cnt, 2)
' Else:
'3a(ii) action whilst match is found --Inner Loop------
Do While Not IsError(MtchRes) ' The 3a Loop
Dim DupyCnt As Long: Let DupyCnt = DupyCnt + 1
If DupyCnt > 1 Then
Let arrOut(MtchRes, 1) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 1): arrOut(MtchRes, 2) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 2)
Else
Let arrOut(MtchRes, 1) = "": arrOut(MtchRes, 2) = "" ' remove the found data from array for output so that next line can look again for a possible duplicate
End If
Let arrSht2Chk(MtchRes) = "" ' remove entry in check array so that next line can look for possible duplicate
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
Loop ' ----------------------------------------
' End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Original
Next Cnt ' ========= End Main loop ================= effectively we go to next row of data in Original with this line
Rem 3b Second Loop ' ##### Start Second loop #####
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of NEW
'Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2ChkKopie, 0)
If IsError(MtchRes) Then ' case data is missing NEW ( MISSING: )
Let arrOut(Cnt, 1) = "MISSING: " & arrSht1(Cnt, 1): arrOut(Cnt, 2) = "MISSING: " & arrSht1(Cnt, 2): arrOut(Cnt, 3) = "MISSING: " & arrSht1(Cnt, 4): arrOut(Cnt, 4) = "MISSING: " & arrSht1(Cnt, 5): arrOut(Cnt, 5) = "MISSING: " & arrSht1(Cnt, 6)
Else
End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Original
Next Cnt ' ##### End Second Loop ################# effectively we go to next row of data in Original with this line


Rem 5 Output in new file For testing purposes, I give the output in a third worksheet, Tabelle3
Dim Ws3 As Worksheet: Set Ws3 = ThisWorkbook.Worksheets("Result")
Ws3.Cells.ClearContents
Let Ws3.Range("A1:F1").Value = "Original": Ws3.Range("G1:K1").Value = "Test Output": Ws3.Range("L1:Q1").Value = "NEW"
Let Ws3.Range("A2").Resize(UBound(arrSht1(), 1), UBound(arrSht1(), 2)).Value = arrSht1()
Let Ws3.Range("G2").Resize(UBound(arrOut(), 1), UBound(arrOut(), 2)).Value = arrOut()
Let Ws3.Range("L2").Resize(UBound(arrSht2(), 1), UBound(arrSht2(), 2)).Value = arrSht2()
Ws3.Columns.AutoFit
Rem 6 MsgBox output
' MsgBox Prompt:="Inserted lines is " & AdedRows & vbCrLf & "Changed cells is " & DifCnt
End Sub

DocAElstein
07-29-2018, 11:51 AM
Suggested test data to answer this post: http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10754#post10754

Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G

1Customer:Assembly #:Assembly Name:


2#Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


3
1
1
Nu Torque

13456
456
456


4
2
1
Blu Origin

Spaceship
457
457


5
3
2
Jet Blue21

ABC
458
458


6
4
3
EXCELL123

123
ABC
ABC


7
5
3
Toyota

Supra
460
460


8
6
2
Emirate

ABC12345
461
461


9
7
1
Angel

ABC12346
462
462
Worksheet: Original


Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G

1Customer:Assembly #:Assembly Name:


2#Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


3
1
1
Nu Torque

13456
456
456


4
2
1
Blu Origin

Spaceship
457
457


5
3
2
Jet Blue23

ABC
DEF
DEF


6
4
3
EXCELL123

123
ABC
ABC


7
5
3
Toyota

Supra
460
460


8
6
2
Emirate

ABC12345
461
461


9
3
2
Jet Blue21

ABC
458
458
Worksheet: NEW

DocAElstein
07-29-2018, 12:00 PM
In the last code , ( Sub Testies ), the following output is obtained when using the suggested test data above ( http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=10756#post10756 ) :


Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q

1OriginalOriginalOriginalOriginalOriginalOriginalT est OutputTest OutputTest OutputTest OutputTest OutputNEWNEWNEWNEWNEWNEW


2Assembly #:Assembly Name: Assembly #:Assembly Name:


3Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PNQty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


4
1Nu Torque
13456
456
456
1Nu Torque
13456
456
456


5
1Blu OriginSpaceship
457
457
1Blu OriginSpaceship
457
457


6
2Jet Blue21ABC
458
4582Jet Blue23ABCDEFDEF
2Jet Blue23ABCDEFDEF


7
3EXCELL123
123ABCABC
3EXCELL123
123ABCABC


8
3ToyotaSupra
460
460
3ToyotaSupra
460
460


9
2EmirateABC12345
461
461
2EmirateABC12345
461
461


10
1AngelABC12346
462
462MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
2Jet Blue21ABC
458
458
Worksheet: Result


Using Excel 2007 32 bit
Row\Col
G
H
I
J
K

1Test OutputTest OutputTest OutputTest OutputTest Output


2


3


4


5


62Jet Blue23ABCDEFDEF


7


8


9


10MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
Worksheet: Result



Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q

1OriginalOriginalOriginalOriginalOriginalOriginalT est OutputTest OutputTest OutputTest OutputTest OutputNEWNEWNEWNEWNEWNEW


6
2Jet Blue21ABC
458
4582Jet Blue23ABCDEFDEF
2Jet Blue23ABCDEFDEF
Worksheet: Result

_._____________________________________-

We have currently output like this:

Test OutputTest OutputTest OutputTest OutputTest Output

2Jet Blue23ABCDEFDEF
But We want this to look more similar to screenshot output from post #15 ( http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10754#post10754 )

DocAElstein
07-29-2018, 01:31 PM
Code to answer this post: http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10754#post10754



Sub TestyCalls() ' http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741
' Call Testie(Worksheets("Original"), Worksheets("NEW"))
' Call Testy(Worksheets("Original"), Worksheets("NEW"))
' Call Testies(Worksheets("Original"), Worksheets("NEW"))
Call Tests28July(Worksheets("Original"), Worksheets("NEW"))
End Sub
Sub Tests28July(Ws1 As Worksheet, Ws2 As Worksheet)
Rem 1 Worksheet data info
'1a capture data
'1a(i) last data rows
Dim lr1_1 As Long, Lr1_2 As Long, Lr2_1 As Long, Lr2_2 As Long, Lr1 As Long, lr2 As Long
Let lr1_1 = Ws1.Cells(Rows.Count, 1).End(xlUp).row
Let Lr1_2 = Ws1.Cells(Rows.Count, 2).End(xlUp).row: Lr2_1 = Ws2.Cells(Rows.Count, 1).End(xlUp).row: Lr2_2 = Ws2.Cells(Rows.Count, 2).End(xlUp).row
If lr1_1 > Lr1_2 Then
Let Lr1 = lr1_1
Else
Let Lr1 = Lr1_2
End If
Let lr2 = Lr2_2: If Lr2_1 > Lr2_2 Then Let lr2 = Lr2_1
'1a(ii) capture data into arrays in one go
Dim arrSht1() As Variant, arrSht2() As Variant
Let arrSht1() = Ws1.Range("B1:G" & Lr1 & "").Value
Let arrSht2() = Ws2.Range("B1:G" & Lr1 & "").Value
Rem 2 arrays for check and output
Dim arrSht1b() As String, arrOut() As String, arrSht1Chk() As String, arrSht2Chk() As String, arrSht2ChkKopie() As String
'2a size arrays to that of sheet 2 data
' ReDim arrSht1b(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
ReDim arrOut(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2) - 1) ' -1 as one column , D is not required
ReDim arrSht1Chk(1 To UBound(arrSht1(), 1))
ReDim arrSht2Chk(1 To UBound(arrSht2(), 1))
ReDim arrSht2ChkKopie(1 To UBound(arrSht2(), 1))
'2b make check arrays fill modified sheet 1 array, arrSht1b() , initially with sheet 1 data
Dim Cnt As Long
For Cnt = 1 To UBound(arrSht1(), 1) Step 1
' Let arrSht1b(Cnt, 1) = arrSht1(Cnt, 1): Let arrSht1b(Cnt, 2) = arrSht1(Cnt, 2)
' Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & "|" & arrSht1(Cnt, 2)
Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & "|" & arrSht1(Cnt, 2) & "|" & arrSht1(Cnt, 4) & "|" & arrSht1(Cnt, 5) & "|" & arrSht1(Cnt, 6)
Next Cnt
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
' Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & "|" & arrSht2(Cnt, 2)
Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & "|" & arrSht2(Cnt, 2) & "|" & arrSht2(Cnt, 4) & "|" & arrSht2(Cnt, 5) & "|" & arrSht2(Cnt, 6)
Next Cnt
Let arrSht2ChkKopie() = arrSht2Chk() ' Arrays of same size and type can be assiigned to eachother
'2c make contents of array for output initially all dat from NEW
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
Let arrOut(Cnt, 1) = CStr(arrSht2(Cnt, 1)): arrOut(Cnt, 2) = CStr(arrSht2(Cnt, 2)): arrOut(Cnt, 3) = CStr(arrSht2(Cnt, 4)):: arrOut(Cnt, 4) = CStr(arrSht2(Cnt, 5)):: arrOut(Cnt, 5) = CStr(arrSht2(Cnt, 6))
Next Cnt
Rem 3 main loop ' == Start Main loop ================
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of NEW
Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
' If IsError(MtchRes) Then ' case data is MISSING: NEW ( MISSING: ) ' This straight forward modification to the existing code will not work. This is because the code modifies the check array , arrSht2Chk() , when checking for the data from Original in NEW
' Let arrOut(Cnt, 1) = "Missing: " & arrSht1(Cnt, 1): arrOut(Cnt, 2) = "MISSING:: " & arrSht1(Cnt, 2)
' Else:
'3a(ii) action whilst match is found --Inner Loop------
Do While Not IsError(MtchRes) ' The 3a Loop
Dim DupyCnt As Long: Let DupyCnt = DupyCnt + 1
If DupyCnt > 1 Then
Let arrOut(MtchRes, 1) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 1): arrOut(MtchRes, 2) = "Dup " & DupyCnt & " of " & arrOut(MtchRes, 2)
Else
Let arrOut(MtchRes, 1) = "": arrOut(MtchRes, 2) = "": arrOut(MtchRes, 3) = "": arrOut(MtchRes, 4) = "": arrOut(MtchRes, 5) = "" ' remove the found data from array for output so that next line can look again for a possible duplicate
End If
Let arrSht2Chk(MtchRes) = "" ' remove entry in check array so that next line can look for possible duplicate
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
Loop ' ----------------------------------------
' End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Original
Next Cnt ' ========= End Main loop ================= effectively we go to next row of data in Original with this line
Rem 3b Second Loop ' ##### Start Second loop #####
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of NEW
'Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2ChkKopie, 0)
If IsError(MtchRes) Then ' case data is missing NEW ( MISSING: )
Let arrOut(Cnt, 1) = "MISSING: " & arrSht1(Cnt, 1): arrOut(Cnt, 2) = "MISSING: " & arrSht1(Cnt, 2): arrOut(Cnt, 3) = "MISSING: " & arrSht1(Cnt, 4): arrOut(Cnt, 4) = "MISSING: " & arrSht1(Cnt, 5): arrOut(Cnt, 5) = "MISSING: " & arrSht1(Cnt, 6)
Else
End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Original
Next Cnt ' ##### End Second Loop ################# effectively we go to next row of data in Original with this line
Rem 3c(i) Third Loop ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
For Cnt = 1 To UBound(arrOut(), 1) Step 1 ' Counting at each row of output arrray
If InStr(1, arrOut(Cnt, 1), "MISSING:", vbBinaryCompare) <> 1 Then
Dim Cntx As Long ' for loop across "columns"
'3c(ii) Loop across columns in output array
For Cntx = 1 To 2 ' .....we need to break up into two loops, as we have columns in Output array of 1 2 3 4 5 but in Input array for sheet 1 we have B C D E F G .. D is ignored,
If arrOut(Cnt, Cntx) <> "" And arrOut(Cnt, Cntx) <> CStr(arrSht1(Cnt, Cntx)) Then ' condition for changed data
Let arrOut(Cnt, Cntx) = CStr(arrSht1(Cnt, Cntx)) & " < > " & arrOut(Cnt, Cntx)
Else
End If
Next Cntx
For Cntx = 3 To UBound(arrOut(), 2) ' we need to do break up into two loops......
If arrOut(Cnt, Cntx) <> "" And arrOut(Cnt, Cntx) <> CStr(arrSht1(Cnt, Cntx + 1)) Then ' condition for changed data
Let arrOut(Cnt, Cntx) = CStr(arrSht1(Cnt, Cntx + 1)) & " < > " & arrOut(Cnt, Cntx)
Else
End If
Next Cntx
Else ' case we have a Missing row, so no action in Third Loop 3c
End If
Next Cnt ' @@@@@ End Third Loop ' @@@@@@@@@@@@@@@@@

Rem 5 Output in new file For testing purposes, I give the output in a third worksheet, Tabelle3
Dim Ws3 As Worksheet: Set Ws3 = ThisWorkbook.Worksheets("Result")
Ws3.Cells.ClearContents
Let Ws3.Range("A1:F1").Value = "Original": Ws3.Range("G1:K1").Value = "Test Output": Ws3.Range("L1:Q1").Value = "NEW"
Let Ws3.Range("A2").Resize(UBound(arrSht1(), 1), UBound(arrSht1(), 2)).Value = arrSht1()
Let Ws3.Range("G2").Resize(UBound(arrOut(), 1), UBound(arrOut(), 2)).Value = arrOut()
Let Ws3.Range("L2").Resize(UBound(arrSht2(), 1), UBound(arrSht2(), 2)).Value = arrSht2()
Ws3.Columns.AutoFit
Rem 6 MsgBox output
' MsgBox Prompt:="Inserted lines is " & AdedRows & vbCrLf & "Changed cells is " & DifCnt
End Sub

DocAElstein
07-29-2018, 01:33 PM
Sample test results for code from last post ( http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=10758#post10758 )

Using Excel 2007 32 bit

OriginalOriginalOriginalOriginalOriginalOriginalTe st OutputTest OutputTest OutputTest OutputTest OutputNEWNEWNEWNEWNEWNEW

Assembly #:Assembly Name: Assembly #:Assembly Name:

Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PNQty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


1Nu Torque
13456
456
456
1Nu Torque
13456
456
456


1Blu OriginSpaceship
457
457
1Blu OriginSpaceship
457
457


2Jet Blue21ABC
458
4582Jet Blue21 < > Jet Blue23ABC458 < > DEF458 < > DEF
2Jet Blue23ABCDEFDEF


3EXCELL123
123ABCABC
3EXCELL123
123ABCABC


3ToyotaSupra
460
460
3ToyotaSupra
460
460


2EmirateABC12345
461
461
2EmirateABC12345
461
461


1AngelABC12346
462
462MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
2Jet Blue21ABC
458
458
Worksheet: Result


Using Excel 2007 32 bit

Test OutputTest OutputTest OutputTest OutputTest Output









2Jet Blue21 < > Jet Blue23ABC458 < > DEF458 < > DEF







MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
Worksheet: Result

DocAElstein
07-30-2018, 12:38 PM
Code for alternative(2) output
In support of this post:
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10764#post10764



Sub TestyCalls() ' http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10741#post10741
' Call Testie(Worksheets("Original"), Worksheets("NEW"))
' Call Testy(Worksheets("Original"), Worksheets("NEW"))
' Call Testies(Worksheets("Original"), Worksheets("NEW"))
' Call Tests28July(Worksheets("Original"), Worksheets("NEW"))
Call Out2Testies(Worksheets("Original"), Worksheets("NEW"))
End Sub
Sub Out2Testies(Ws1 As Worksheet, Ws2 As Worksheet)
Rem 1 Worksheet data info
'1a capture data
'1a(i) last data rows
Dim lr1_1 As Long, Lr1_2 As Long, Lr2_1 As Long, Lr2_2 As Long, Lr1 As Long, lr2 As Long
Let lr1_1 = Ws1.Cells(Rows.Count, 1).End(xlUp).row
Let Lr1_2 = Ws1.Cells(Rows.Count, 2).End(xlUp).row: Lr2_1 = Ws2.Cells(Rows.Count, 1).End(xlUp).row: Lr2_2 = Ws2.Cells(Rows.Count, 2).End(xlUp).row
If lr1_1 > Lr1_2 Then
Let Lr1 = lr1_1
Else
Let Lr1 = Lr1_2
End If
Let lr2 = Lr2_2: If Lr2_1 > Lr2_2 Then Let lr2 = Lr2_1
'1a(ii) capture data into arrays in one go
Dim arrSht1() As Variant, arrSht2() As Variant
Let arrSht1() = Ws1.Range("B1:G" & Lr1 & "").Value
Let arrSht2() = Ws2.Range("B1:G" & Lr1 & "").Value
Rem 2 arrays for check and output
Dim arrSht1b() As String, arrOut() As String, arrSht1Chk() As String, arrSht2Chk() As String, arrSht2ChkKopie() As String
'2a size arrays to that of sheet 2 data
' ReDim arrSht1b(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2))
' ReDim arrOut(1 To UBound(arrSht2(), 1), 1 To UBound(arrSht2(), 2) - 1) ' -1 as one column , D is not required
ReDim arrOut(1 To UBound(arrSht2(), 1), 1 To 1) ' arrOut() is now only one column, as I am using the concatenated string in the output
ReDim arrSht1Chk(1 To UBound(arrSht1(), 1))
ReDim arrSht2Chk(1 To UBound(arrSht2(), 1))
ReDim arrSht2ChkKopie(1 To UBound(arrSht2(), 1))
'2b make check arrays fill modified sheet 1 array, arrSht1b() , initially with sheet 1 data
Dim Cnt As Long
For Cnt = 1 To UBound(arrSht1(), 1) Step 1
' Let arrSht1b(Cnt, 1) = arrSht1(Cnt, 1): Let arrSht1b(Cnt, 2) = arrSht1(Cnt, 2)
' Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & "|" & arrSht1(Cnt, 2)
Let arrSht1Chk(Cnt) = arrSht1(Cnt, 1) & " " & arrSht1(Cnt, 2) & " " & arrSht1(Cnt, 4) & " " & arrSht1(Cnt, 5) & " " & arrSht1(Cnt, 6)
Next Cnt
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
' Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & "|" & arrSht2(Cnt, 2)
Let arrSht2Chk(Cnt) = arrSht2(Cnt, 1) & " " & arrSht2(Cnt, 2) & " " & arrSht2(Cnt, 4) & " " & arrSht2(Cnt, 5) & " " & arrSht2(Cnt, 6)
Next Cnt
Let arrSht2ChkKopie() = arrSht2Chk() ' Arrays of same size and type can be assiigned to eachother
'2c make contents of array for output initially all dat from NEW
For Cnt = 1 To UBound(arrSht2(), 1) Step 1
Let arrOut(Cnt, 1) = arrSht2Chk(Cnt)
Next Cnt
Rem 3 main loop ' == Start Main loop ================
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of NEW
Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
' If IsError(MtchRes) Then ' case data is MISSING: NEW ( MISSING: ) ' This straight forward modification to the existing code will not work. This is because the code modifies the check array , arrSht2Chk() , when checking for the data from Original in NEW
' Let arrOut(Cnt, 1) = "Missing: " & arrSht1(Cnt, 1): arrOut(Cnt, 2) = "MISSING:: " & arrSht1(Cnt, 2)
' Else:
'3a(ii) action whilst match is found --Inner Loop------
Do While Not IsError(MtchRes) ' The 3a Loop
Dim DupyCnt As Long: Let DupyCnt = DupyCnt + 1
If DupyCnt > 1 Then
Let arrOut(MtchRes, 1) = "Dup " & DupyCnt & " of " & arrSht2ChkKopie(MtchRes)
Else
Let arrOut(MtchRes, 1) = ""
End If
Let arrSht2Chk(MtchRes) = "" ' remove entry in check array so that next line can look for possible duplicate
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2Chk(), 0)
Loop ' ----------------------------------------
' End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Original
Next Cnt ' ========= End Main loop ================= effectively we go to next row of data in Original with this line
Rem 3b Second Loop ' ##### Start Second loop #####
For Cnt = 1 To UBound(arrSht1(), 1) Step 1 ' Counting at each row of NEW
'Dim MtchRes As Variant
Let MtchRes = Application.Match(arrSht1Chk(Cnt), arrSht2ChkKopie, 0)
If IsError(MtchRes) Then ' case data is missing NEW ( MISSING: )
Let arrOut(Cnt, 1) = "MISSING: " & arrSht1Chk(Cnt)
Else
End If '
Let DupyCnt = 0 ' reset the Duplicated data count for next row of data in Original
Next Cnt ' ##### End Second Loop ################# effectively we go to next row of data in Original with this line
Rem 3c(i) Third Loop ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
For Cnt = 1 To UBound(arrOut(), 1) Step 1 ' Counting at each row of output arrray
If InStr(1, arrOut(Cnt, 1), "MISSING:", vbBinaryCompare) <> 1 Then
If arrOut(Cnt, 1) <> "" Then '
Let arrOut(Cnt, 1) = arrSht1Chk(Cnt) & " < > " & arrOut(Cnt, 1)
Else
End If
Else ' case we have a Missing row, so no action in Third Loop 3c
End If
Next Cnt ' @@@@@ End Third Loop ' @@@@@@@@@@@@@@@@@


Rem 5 Output in new file For testing purposes, I give the output in a third worksheet, Tabelle3
Dim Ws3 As Worksheet: Set Ws3 = ThisWorkbook.Worksheets("Result")
Ws3.Cells.ClearContents
Let Ws3.Range("A1:F1").Value = "Original": Ws3.Range("G1").Value = "Test Output": Ws3.Range("H1:M1").Value = "NEW"
Let Ws3.Range("A2").Resize(UBound(arrSht1(), 1), UBound(arrSht1(), 2)).Value = arrSht1()
Let Ws3.Range("G2").Resize(UBound(arrOut(), 1), 1).Value = arrOut()
Let Ws3.Range("H2").Resize(UBound(arrSht2(), 1), UBound(arrSht2(), 2)).Value = arrSht2()
Ws3.Columns.AutoFit
Rem 6 MsgBox output
' MsgBox Prompt:="Inserted lines is " & AdedRows & vbCrLf & "Changed cells is " & DifCnt
End Sub

DocAElstein
07-30-2018, 12:43 PM
test results from code above, ( http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=10762#post10762 ) in support of this post:
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10764#post10764

Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M

1OriginalOriginalOriginalOriginalOriginalOriginalT est OutputNEWNEWNEWNEWNEWNEW


2Assembly #:Assembly Name: Assembly #:Assembly Name:


3Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PNQty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


4
1Nu Torque
13456
456
456
1Nu Torque
13456
456
456


5
1Blu OriginSpaceship
457
457
1Blu OriginSpaceship
457
457


6
2Jet Blue21ABC
458
4582 Jet Blue21 ABC 458 458 < > 2 Jet Blue23 ABC DEF DEF
2Jet Blue23ABCDEFDEF


7
3EXCELL123
123ABCABC
3EXCELL123
123ABCABC


8
3ToyotaSupra
460
460
3ToyotaSupra
460
460


9
2EmirateABC12345
461
461
2EmirateABC12345
461
461


10
1AngelABC12346
462
462MISSING: 1 Angel ABC12346 462 462
2Jet Blue21ABC
458
458
Worksheet: Result

Using Excel 2007 32 bit

OriginalOriginalOriginalOriginalOriginalOriginalTe st OutputNEWNEWNEWNEWNEWNEW

Assembly #:Assembly Name: Assembly #:Assembly Name:

Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PNQty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


1Nu Torque
13456
456
456
1Nu Torque
13456
456
456


1Blu OriginSpaceship
457
457
1Blu OriginSpaceship
457
457


2Jet Blue21ABC
458
4582 Jet Blue21 ABC 458 458 < > 2 Jet Blue23 ABC DEF DEF
2Jet Blue23ABCDEFDEF


3EXCELL123
123ABCABC
3EXCELL123
123ABCABC


3ToyotaSupra
460
460
3ToyotaSupra
460
460


2EmirateABC12345
461
461
2EmirateABC12345
461
461


1AngelABC12346
462
462MISSING: 1 Angel ABC12346 462 462
2Jet Blue21ABC
458
458
Worksheet: Result


Using Excel 2007 32 bit
Row\Col
G

1Test Output


2


3


4


5


62 Jet Blue21 ABC 458 458 < > 2 Jet Blue23 ABC DEF DEF


7


8


9


10MISSING: 1 Angel ABC12346 462 462
Worksheet: Result

DocAElstein
07-31-2018, 12:54 PM
Test data in support of this Post:
http://www.excelfox.com/forum/showthread.php/2278-Compare-each-complete-row-of-sheet2-with-sheet3-each-complete-row?p=10766#post10766



Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F

11 L 11 L 1,1 L 1


21 G 11 E 11 L 1,1 L 11 E 1


31 G 11 E 11 L 1,1 L 11 E 11 G 1


41 E 11 G 1


5
Worksheet: Sheet2


Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J

11 L 11 E 11 L 1,1 L 11 G 1


21 G 11 E 11 L 11 L 11 G 1


31 L 11 L 1,1 L 11 L 11 G 1


41 L 11 L 1,1 L 1


51 L 11 G 11 E 11 L 1


61 G 11 L 11 L 1,1 L 11 L 11 L 11 G 1


71 E 11 E 11 L 1,1 L 11 L 11 G 1


81 E 11 G 11 E 11 L 1,1 L 11 G 11 G 11 G 11 G 1


91 E 11 E 11 L 11 L 11 G 11 G 11 G 11 G 11 G 1


10
Worksheet: Sheet3


_._______________________

The results after running the code given on Post #3 of main Thread ( http://www.excelfox.com/forum/showthread.php/2278-Compare-each-complete-row-of-sheet2-with-sheet3-each-complete-row?p=10766#post10766 )
Using Excel 2007 32 bit
Row\Col
A
B
C
D

120abc


2abc20


3def


4ghi


5
Worksheet: Sheet4

DocAElstein
08-02-2018, 11:57 AM
( this is original post 11279 https://excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11279&viewfull=1#post11279
https://excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11279&viewfull=1#post11279 )




Attaching a File to a Thread post at excelfox
1 To get Manage Attachments Window dialogue box
First you must get up the Manage Attachments Window dialogue box.

_(i) For a new Thread
Either
_1_(i) _a) Select Paper clip icon https://imgur.com/owxsBy5
http://i.imgur.com/owxsBy5.jpg
Or
_1_(i) _b) Scroll down and select manage attachments
a)PaperClipIcon or b)ManageAttachmants.JPG : http://i.imgur.com/3VAkJO9.jpg https://imgur.com/YFEUDUh
http://i.imgur.com/3VAkJO9.jpg
https://imgur.com/YFEUDUh

(ii) For a Reply or when Editing an existing post
_ Hit Reply button or Edit Post Button
Reply or Edit Post.JPG : https://imgur.com/Bm1Zy6T
_ Hit Go Advanced button
GoAdvancedReplyWindow.JPG , GoAdvanced1.JPG : https://imgur.com/QLhHBGl , https://imgur.com/WXoKcoF
_ Scroll down and select manage attachments
Scroll down to Hit manage Attachments.JPG : https://imgur.com/uNkr6Eq



Finally you should see the Manage Attachments Window dialogue box
Manage Attachments Window dialogue box.JPG : https://imgur.com/BFFUIuG
21033595

Using this dialogue box window you can manage your attachments
2 To add a File to the current post:
Steps like the following are needed to attach a file to the current post. It may look a little bit different on your computer
_ Add Files.JPG : https://imgur.com/hIdo0Av
_ SelectFiles.JPG : https://imgur.com/9XZJuig
_ UploadFiles5.JPG : https://imgur.com/f0PXtVA
_ Done6.JPG : https://imgur.com/a6oFeIQ
That's it!...:)
The file should now have been attached.


_._______

Practice before posting in a main Thread:
You can practice uploading a file by starting a new test thread here:
http://www.excelfox.com/forum/forumdisplay.php/17-Test-Area
Give the Thread a title such as …”Just testing. No Reply needed”
Test Area new Thread 1 .JPG , Test Area new Thread just testing .JPG https://imgur.com/S3uneWf , https://imgur.com/gUFHcBp

You can then practice uploading attachments or you can also practice any other posting and editing features, such as code tags ( http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=10690#post10690 )

_._____________________________



Alternative to attaching a file: post a link to your file held at a file share site:
See here for example:
http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)/page8#post10725
Or if you are familiar with file sharing sites go direct here
https://account.box.com/signup/n/personal#58luf

DocAElstein
08-02-2018, 11:57 AM
( this is copied post 15589 https://excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11279&viewfull=1#post15589
https://excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11279&viewfull=1#post15589
Images may work better in this Post if you are using an older Operating System
)


Attaching a File to a Thread post at excelfox
1 To get Manage Attachments Window dialogue box
First you must get up the Manage Attachments Window dialogue box.

_(i) For a new Thread
Either
_1_(i) _a) Select Paper clip icon https://imgur.com/owxsBy5
http://i.imgur.com/owxsBy5.jpg
Or
_1_(i) _b) Scroll down and select manage attachments
a)PaperClipIcon or b)ManageAttachmants.JPG : http://i.imgur.com/3VAkJO9.jpg
http://i.imgur.com/YFEUDUh.jpg
a)PaperClipIcon: http://i.imgur.com/3VAkJO9.jpg
b)ManageAttachmants.JPG: http://i.imgur.com/YFEUDUh.jpg

(ii) For a Reply or when Editing an existing post
_ Hit Reply button or Edit Post Button
Reply or Edit Post.JPG : http://i.imgur.com/Bm1Zy6T.jpg
_ Hit Go Advanced button
GoAdvancedReplyWindow.JPG , GoAdvanced1.JPG : http://i.imgur.com/QLhHBGl.jpg , http://i.imgur.com/WXoKcoF.jpg
_ Scroll down and select manage attachments
Scroll down to Hit manage Attachments.JPG : http://i.imgur.com/uNkr6Eq.jpg



Finally you should see the Manage Attachments Window dialogue box
Manage Attachments Window dialogue box.JPG : http://i.imgur.com/BFFUIuG.jpg
21033594

Using this dialogue box window you can manage your attachments
2 To add a File to the current post:
Steps like the following are needed to attach a file to the current post. It may look a little bit different on your computer
_ Add Files.JPG : http://i.imgur.com/hIdo0Av.jpg
_ SelectFiles.JPG : http://i.imgur.com/9XZJuig.jpg
_ UploadFiles5.JPG : http://i.imgur.com/f0PXtVA.jpg
_ Done6.JPG : http://i.imgur.com/a6oFeIQ.jpg
That's it!...:)
The file should now have been attached.


_._______

Practice before posting in a main Thread:
You can practice uploading a file by starting a new test thread here:
http://www.excelfox.com/forum/forumdisplay.php/17-Test-Area
Give the Thread a title such as …”Just testing. No Reply needed”
Test Area new Thread 1 .JPG , Test Area new Thread just testing .JPG http://i.imgur.com/S3uneWf.jpg , http://i.imgur.com/gUFHcBp.jpg

You can then practice uploading attachments or you can also practice any other posting and editing features, such as code tags ( http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=10690#post10690 )

_._____________________________



Alternative to attaching a file: post a link to your file held at a file share site:
See here for example:
http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)/page8#post10725
Or if you are familiar with file sharing sites go direct here
https://account.box.com/signup/n/personal#58luf

DocAElstein
08-02-2018, 12:18 PM
In support of this Post
http://www.excelfox.com/forum/showthread.php/2277-Vba-button-Comparison-data-between-two-file-or-two-tabs?p=10771#post10771

Using Excel 2007 32 bit
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q

1OriginalOriginalOriginalOriginalOriginalOriginalT est OutputTest OutputTest OutputTest OutputTest OutputNEWNEWNEWNEWNEWNEW


2Assembly #:Assembly Name: Assembly #:Assembly Name:


3Qty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PNQty PerRef/DesignatorDescriptionCustomer PNInternal PNManufacture PN


4
1Nu TorqueABC
456
456ABC < > 13456
1Nu Torque
13456
456
456


5
1Blu OriginSpaceship
457
457
1Blu OriginSpaceship
457
457


6
2Jet Blue21ABC
458
458
2New: Jet Blue23ABCNew: DEFNew: DEF
2Jet Blue23ABCDEFDEF


7
3EXCELL123
123ABCABC
3EXCELL123
123ABCABC


8
3ToyotaSupra
460
460
3ToyotaSupra
460
460


9
2EmirateABC12345
461
461
2EmirateABC12345
461
461


10
1AngelABC12346
462
462MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
2Jet Blue21ABC
458
458
Worksheet: Result Wanted




Using Excel 2007 32 bit


1Nu TorqueABC
456
456ABC < > 13456
1Nu Torque
13456
456
456


1Blu OriginSpaceship
457
457
1Blu OriginSpaceship
457
457


2Jet Blue21ABC
458
458
2New: Jet Blue23ABCNew: DEFNew: DEF
2Jet Blue23ABCDEFDEF


3EXCELL123
123ABCABC
3EXCELL123
123ABCABC


3ToyotaSupra
460
460
3ToyotaSupra
460
460


2EmirateABC12345
461
461
2EmirateABC12345
461
461


1AngelABC12346
462
462MISSING: 1MISSING: AngelMISSING: ABC12346MISSING: 462MISSING: 462
2Jet Blue21ABC
458
458
Worksheet: Result Wanted

DocAElstein
11-04-2018, 06:43 PM
Code for Yasser, here: http://www.eileenslounge.com/viewtopic.php?f=30&t=31150&p=241152#p241148





Option Explicit
Sub SUMfromD14inClsdWkBksInFolder() ' Loop through closed workbooks without opening them ' http://www.eileenslounge.com/viewtopic.php?f=30&t=31150&p=241152#p241152
' Use Dir function with wildcards in full path and name search string to find file names you want
Dim FileName As String:
Let FileName = Dir("C:\Users\Elston\Desktop\YassersFolder\*record*", vbNormal) ' The Dir function uased the first time here, it will find the first file with "record" in its file name in the folder , "YassersFolder". If it does not find one, it will return "". If it finds one, then variable FileName will be given its name, ( just the name, not the entire file path and name)
'Do do Looping while you find the file names you want =========
Do While Not FileName = "" ' Dir Function will return "" if it finds no new File names of the ones looking for. If it does find a File name, then use that filename in the closed workbook reference which you put in a spare cell, for example, A1
Let ThisWorkbook.Worksheets.Item(1).Range("A1").Value = "=" & "'" & "C:\Users\Elston\Desktop\YassersFolder\" & "[" & FileName & "]Tabelle1'!$D$14"
Dim SomeTotal As Double ' A variable to hold the Sum total so far
Let SomeTotal = SomeTotal + ThisWorkbook.Worksheets.Item(1).Range("A1").Value
Let FileName = Dir ' an unqualified Dir will look again using the last search criteria, so the first time this line is used, Dir Function will try to find a second file with the string part "record" in its file name
Loop ' do while you find the file names you want ==========
Let ThisWorkbook.Worksheets.Item(1).Range("A10").Value = SomeTotal
End Sub

DocAElstein
11-11-2018, 03:47 PM
Codes to support this
https://www.thespreadsheetguru.com/blog/the-vba-guide-to-named-ranges#comment-4189507335

....

The main demo code is Sub NamedRangeScopes() , but that Calls the others, so copy them all to the same code module , and then run the main demo code, Sub NamedRangeScopes()




Sub NamedRangeScopes()
10 Call FukOffNames
20 Call getWbNames
30 Rem 1 Add 3 named ranges, 1(i) '_-in the Workbooks name object collection, and 1(ii) in the first worksheet name object collection and 1(iii) '_-in the second worksheet name object collection
40 '1(i) Add a Workbook names object in the Workbook name object collection of this workbook
50 ThisWorkbook.Names.Add Name:="Name1", RefersTo:=ThisWorkbook.Worksheets.Item(1).Range("A1") '_-in the Workbooks name object collection
60 'The form above is like ThisWorkbook.Names.Add Name:="Name1", RefersTo:=Worksheets(Sheet1).Range("A1")
70 '1(ii) Add a name object in the first worksheet's name object collection
80 ThisWorkbook.Worksheets.Item(1).Names.Add Name:="Name1", RefersTo:=ThisWorkbook.Worksheets.Item(1).Range("A1") '_-in the first worksheet name object collection
90 'The form above is like Worksheets("Sheet1).Names.Add Name:="Name1" , RefersTo:=Sheet1.Range("A1")
100 '1(iii) Add a name object in the second worksheet's name object collection
110 ThisWorkbook.Worksheets.Item(2).Names.Add Name:="Name2", RefersTo:=ThisWorkbook.Worksheets.Item(2).Range("A1") '_-in the second worksheet name object collection
120 'The form above is like Worksheets("Sheet2).Names.Add Name:="Name2" , RefersTo:=Sheet2.Range("A1")
130 Rem 2 Change the string name of a named range
140 Call GetChaNameObjects(140) ' Check out Info for all Name objects
150 '2a) Use Workbook names objects to Change the worksheet names object name that has the same name as the workbook names object name, change it twice, first using the workbook names object collection and then the worksheet names object collection
160 Let ThisWorkbook.Names(ThisWorkbook.Worksheets.Item(1) .Name & "!" & "Name1").Name = "Name1_1"
170 ' The form above is like ThisWorkbook.Names("Sheet1!Name").Name = "Name1_1"
180 Call GetChaNameObjects(180)
190 Let ThisWorkbook.Worksheets.Item(1).Names(ThisWorkbook .Worksheets.Item(1).Name & "!" & "Name1_1").Name = "Name1_2"
200 Call GetChaNameObjects(200)
210 Let ThisWorkbook.Worksheets.Item(1).Names("Name1_2").Name = "Name1_3"
220 Call GetChaNameObjects(220)
230 '2b) use a Worksheet's (in this example the second worksheet's) name objects to Change the second worksheet's names object, ( we gave it "Name2", but Excel adds a bit so it looks like Sheet2!Name2" which you can get from a VBA code line like ThisWorkbook.Worksheets.Item(2).Name & "!" & "Name2" I do t
his just in case your second worksheet has a tab name other than Sheet2
240 Let ThisWorkbook.Worksheets.Item(2).Names("Name2").Name = "Name2_2"
250 ' Note: you could have equally done this: Let ThisWorkbook.Worksheets.Item(2).Names(ThisWorkbook .Worksheets.Item(2).Name & "!" & "Name2").Name = "Name2_2" , which is like Let ThisWorkbook.Worksheets.Item(2).Names("Sheet2!Name2").Name = "Name2_2"
260 Call GetChaNameObjects(260)
270 Rem 3 Change the string name of a named range, for example the one in the second worksheet names collection whichg we just renamed to "Name2_2" ,(which Excel holds as like "Sheet2!Name2_2")
280 '3a) Use Workbook names objects
290 Let ThisWorkbook.Names(ThisWorkbook.Worksheets.Item(2) .Name & "!" & "Name2_2").RefersTo = ThisWorkbook.Worksheets.Item(2).Range("Z123")
300 Call GetChaNameObjects(300)
310 '3b) Use the second worksheets's names objects
320 Let ThisWorkbook.Worksheets.Item(2).Names("Name2_2").RefersTo = ThisWorkbook.Worksheets.Item(2).Range("X23")
330 Call GetChaNameObjects(330)
End Sub


Sub FukOffNames()
Dim Nme As Name
For Each Nme In ThisWorkbook.Names
Nme.Delete
Next Nme
End Sub


Sub GetChaNameObjects(ByVal CodLn As Long)
Dim Nme As Name, strOut As String
' Name objects belonging in Workbook Names Colection (Workbooks scope)
For Each Nme In ThisWorkbook.Names
If InStr(1, Nme.Name, "!", vbBinaryCompare) > 0 Then ' we will see that a name for a worksheet scope, has an extra bit added onto the name we gave it which includes a "!"
Let strOut = strOut & "Name object Name is """ & Nme.Name & """ (you gave """ & Mid(Nme.Name, 1 + InStr(1, Nme.Name, "!", vbBinaryCompare)) & """)" & vbCrLf & "It has worksheet scope and" & vbCrLf & "it refers to range """ & Nme.RefersTo & """" & vbCrLf & vbCrLf & vbCrLf
Else ' we will see that a name for a workbook scope, remains just as we gave it
Let strOut = strOut & "Name object Name is """ & Nme.Name & """ (the same as you gave)" & vbCrLf & "It has workbook scope and" & vbCrLf & "it refers to range """ & Nme.RefersTo & """" & vbCrLf & vbCrLf & vbCrLf
End If
Next Nme
MsgBox prompt:="Workbook names situation at Code Line " & CodLn & vbCrLf & vbCrLf & strOut, Title:="Name objects in Workbook """ & ThisWorkbook.Name & """ Names Colection are:-": Debug.Print "Name objects in Workbook """ & ThisWorkbook.Name & """ Names Colection are:-" & vbCr & strOut
' Name objects belonging in Workbooks Names Colection (Worksheets scope)
Dim Ws As Worksheet: Let strOut = ""
For Each Ws In ThisWorkbook.Worksheets
For Each Nme In Ws.Names
Let strOut = strOut & "Name object name is """ & Nme.Name & """ (you gave """ & Mid(Nme.Name, 1 + InStr(1, Nme.Name, "!", vbBinaryCompare)) & """)" & vbCrLf & "It has worksheets scope and" & vbCrLf & "it belongs to the Names collection of worksheet """ & Ws.Name & """" & vbCrLf & "and it refers to range """ & Nme.RefersTo & """" & vbCrLf & vbCrLf
Next Nme
Next Ws
MsgBox prompt:="Worksheets names situation at Code Line " & CodLn & vbCrLf & vbCrLf & strOut, Title:="Name objects in all the worksheets Names Colections are:-": Debug.Print "Name objects in all the worksheets Names Colections are:-" & strOut
End Sub


Sub getWbNames()
Dim Nme As Name, Cnt As Long
For Each Nme In ThisWorkbook.Names
Let Cnt = Cnt + 1
Dim strNames As String: Let strNames = strNames & Cnt & " "
If TypeOf Nme.Parent Is Worksheet Then ' https://stackoverflow.com/questions/8656793/progammatically-determine-if-a-named-range-is-scoped-to-a-workbook
Let strNames = strNames & """" & Nme.Name & """ refers to the range ref """ & Nme & """ and and can be referenced only from worksheet with tab Name """ & Nme.Parent.Name & """ ( Worksheet Scope ). ( That worksheet is in the workbook """ & Nme.Parent.Parent.Name & """ )" & vbCrLf & vbCrLf
Else
Let strNames = strNames & """" & Nme.Name & """ refers to the range ref """ & Nme & """ and can be referenced from any sheet in the Workbook """ & Nme.Parent.Name & """ ( Workbook Scope )" & vbCrLf & vbCrLf
End If
Next Nme
If strNames = "" Then
MsgBox prompt:="I don't think you have any Names at the moment luvy"
Else
MsgBox prompt:=strNames, Title:="Spreadsheet Named range objects in " & ThisWorkbook.Name & " are:-": Debug.Print strNames
End If
End Sub

DocAElstein
11-18-2018, 06:03 PM
First main Demo code in support of this Thread:
http://www.excelfox.com/forum/showthread.php/2289-Named-Ranges-and-Named-Ranges-scope-Referencing-a-named-range
Posts from approximately here:
http://www.excelfox.com/forum/showthread.php/2289-Named-Ranges-and-Named-Ranges-scope-Referencing-a-named-range?p=10814#post10814:




Sub FoxySingleCellNamedRanges()
10 Rem -2 Range Info etc.
20 Dim WbMain As Workbook, dataWb1xls As Workbook, dataWb2xlsx As Workbook
30 Set WbMain = Workbooks("MasturFile.xlsm") 'Set WbMain = ThisWorkbook
40 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
50 Set dataWb1xls = Workbooks("Data1.xls")
60 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
70 Set dataWb2xlsx = Workbooks("Data2.xlsx")
80 '
90 Dim LisWkBkPath As String: Let LisWkBkPath = "=" & "'" & ThisWorkbook.Path & "\"
100 '-2b) Some variables to hold a full reference string which we will use in places where we might need any of these variations for a cell reference Sheet7!B5 [myWorkbook.xlsm] Sheet4!B5 'G:\Desktop\MyFolder\[DataFile.xlsx]Tabelle1'!B5 The last one is the form we hold in the variables. Excel and Excel VBA , usually has no issues if you use the full reference in situations where one of the shorter versions may have been sufficient. But on the other hand, you may get unexpected problems if you used a shorter version , and Excel then guesses wrongly for the remaining part, which I believe it always adds internally, ( possibly at some compiling stage ) , before it uses it.
110 Dim MBkTab1B5 As String ' To hold full string reference to B5 in Master Workbook
120 Let MBkTab1B5 = "=" & "'" & ThisWorkbook.Path & "\" & "[" & "MasturFile.xlsm" & "]" & "Tabelle1" & "'" & "!" & "B5"
130 Dim Dat1Tab1B5 As String ' B5 in data1 workbook
140 Let Dat1Tab1B5 = "=" & "'" & ThisWorkbook.Path & "\" & "[" & "Data1.xls" & "]" & "Tabelle1" & "'" & "!" & "B5"
150
160 Rem -1 Error handler
170 On Error GoTo ErrorHandlerCodeSection:
180 GoTo PastErrorHandler
190 ErrorHandlerCodeSection:
200 MsgBox prompt:="Code errored at line " & Erl & " , error was:" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
210 Debug.Print Err.Number & " " & Err.Description
220 Resume Next
230 PastErrorHandler:
240 Rem 0 Clean up
250 Dim WkBk As Workbook
260 For Each WkBk In Workbooks
270 Call FukYaWkBkNames(WkBk)
280 'Call GeTchaNms(280, WkBk)
290 Next WkBk
300 Workbooks("Data1.xls").Close savechanges:=True
310 Workbooks("Data2.xlsx").Close savechanges:=True
312 '0b) clear the entire data ranges in the first worksheet in the main workbook, both headers and data
315 ThisWorkbook.Worksheets.Item(1).Range("B5:C12").ClearContents
320 Rem _1) Data1 "Food" header
330 '1a) Data1 cell Workbook Scoped to its workbook : Info needed for a range in that data file is held in the workbooks name objects collection object of that workbook
340 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
350 Set dataWb1xls = Workbooks("Data1.xls") ' We need this open for the referred to range in the RefersTo:= range reference below
360 dataWb1xls.Names.Add Name:="Dta1Foodheader", RefersTo:=Application.Range(Dat1Tab1B5) ' A personal preference of mine is , once again, to use a full reference. This time it is in the Refers To range. This Refers To:= argument would never need the full file path reference, as the range referenced must be to a range in an open book. Never the less, as usual, VBA accepts the full reference
370 Call GeTchaNms(370, dataWb1xls)
380 dataWb1xls.Close savechanges:=True ' I don't need the workbook open for the next line to work, but I made Added a named range object so I must save the changes for the next line to work as that named range is referenced
390 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "Data1.xls'!Dta1Foodheader" ' "Going" to Workbook Data1.xls
400 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "[Data1.xls]Tabelle4'!Dta1Foodheader" ' "Going" to any worksheet in Data1.xls
410 '1b) Data1 cell Worksheet Scoped to one of its worksheets: Info needed is held in the named objects object of its second worksheets
420 Rem _1 Add some named ranges
430 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
440 Set dataWb1xls = Workbooks("Data1.xls") ' We need this open for the referred to range in the RefersTo:= range reference below
450 dataWb1xls.Worksheets.Item(2).Names.Add Name:="Ws2Dta1Foodheader", RefersTo:=Application.Range(Dat1Tab1B5)
460 Call GeTchaNms(460, dataWb1xls)
470 dataWb1xls.Close savechanges:=True ' I don't need the workbook open for the next line to work, but I made Added a named range object so I must save the changes for the next line to work as that named range is referenced
480 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "[Data1.xls]Tabelle2'!Ws2Dta1Foodheader"
490 '1b)(ii)
500 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
510 Set dataWb1xls = Workbooks("Data1.xls") ' We need this open for the referred to range in the RefersTo:= range reference below
520 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "[Data1.xls]Tabelle2'!Ws2Dta1Foodheader"
530 dataWb1xls.Close savechanges:=False ' I made no changes intentionally , so save without changes in case I accidentally changed anything
540 '1c) Data1 cell Workbook Scoped to a different (open) workbook : Info needed for a range in the data 1 file is held in the workbooks name objects collection object of that workbook, the main file in this case
550 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
560 Set dataWb1xls = Workbooks("Data1.xls") ' We need this open for the referred to range in the RefersTo:= range reference below
570 WbMain.Names.Add Name:="MainDta1Foodheader", RefersTo:=Application.Range(Dat1Tab1B5)
580 dataWb1xls.Close savechanges:=False ' I had this open for the Refers To:= above, but I did not change anything, for example, this time i was not doing anything to any of its named range objects, so just iin case I accidentally changed anything I will close without saving any changes
590 Call GeTchaNms(590, WbMain)
600 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "MasturFile.xlsm'!MainDta1Foodheader" ' "Going" to Workbook MasturFile.xlsm
610 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "[MasturFile.xlsm]Tabelle4'!MainDta1Foodheader" ' "Going" to any worksheet in MasturFile.xlsm
620 '1d) This is an attempt to get at the named range object in a roundabout sort of a way. Here the data 1 cell s scoped to the second data file, "Data2.xlsx" ( Workbooks scoped to workbook "Data2.xlsx" )
630 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
640 Set dataWb1xls = Workbooks("Data1.xls")
650 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
660 Set dataWb2xlsx = Workbooks("Data2.xlsx")
670 dataWb2xlsx.Names.Add Name:="Dta2Dta1Foodheader", RefersTo:=Application.Range(Dat1Tab1B5)
680 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "Data2.xlsx'!Dta2Dta1Foodheader" ' "Going" to Workbook MasturFile.xlsm
690 dataWb1xls.Close savechanges:=False ' I had this open for the Refers To:= above, but I did not change anything, for example, this time i was not doing anything to any of its named range objects, so just iin case I accidentally changed anything I will close without saving any changes
700 dataWb2xlsx.Close savechanges:=True ' A name object was Added, so I have a change to save
710 Let Application.Range(MBkTab1B5).Value = Application.Range(MBkTab1B5).Value ' I have done this here to "catch" the value put in, as it seems to vanish if I re enter the formula ??
720 Rem 2 Experiments with named ranges in the LHS , like in Range("rngNamed") =
730 '2a) scope to a data file
740 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
750 Set dataWb2xlsx = Workbooks("Data2.xlsx") ' Open an arbritrary data file to use one if its names objects as the place to go to get the info about the named range
760 dataWb2xlsx.Names.Add Name:="Dta2MainFoodheader", RefersTo:=Application.Range(MBkTab1B5)
770 Call GeTchaNms(770, dataWb2xlsx)
780 Let Application.Range(LisWkBkPath & "Data2.xlsx'!Dta2MainFoodheader").Value = LisWkBkPath & "Data1.xls'!Dta1Foodheader" ' LHS is going to workbook Data2.xlsx RHS is "Going" to Workbook Data1.xls
790 dataWb2xlsx.Close savechanges:=True ' A name object was Added, so I have a change to save
800 Let Application.Range(LisWkBkPath & "Data2.xlsx'!Dta2MainFoodheader").Value = LisWkBkPath & "Data1.xls'!Dta1Foodheader" ' LHS is going to workbook Data2.xlsx RHS is "Going" to Workbook Data1.xls
810 '2b) Workbooks Scope to main workbook: Info for named range is in Name Objects collection of Main workbook
820 WbMain.Names.Add Name:="MainFoodheader", RefersTo:=Application.Range(MBkTab1B5)
830 Let Application.Range(LisWkBkPath & WbMain.Name & "'!MainFoodheader").Value = LisWkBkPath & "Data1.xls'!Dta1Foodheader" ' LHS is going to workbook Data2.xlsx RHS is "Going" to Workbook Data1.xls
840 Call GeTchaNms(840, WbMain)
850 Rem 3 Bring in Header "Suppliment" from data 2 workbook directly without named ranges
860 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
870 Set dataWb2xlsx = Workbooks("Data2.xlsx") ' Needed for next line
880 Let Application.Range("=" & "'" & WbMain.Path & "\" & "[" & WbMain.Name & "]" & WbMain.Worksheets.Item(1).Name & "'" & "!" & "B10").Value = "=" & "'" & dataWb2xlsx.Path & "\" & "[" & dataWb2xlsx.Name & "]" & dataWb2xlsx.Worksheets.Item(1).Name & "'" & "!" & "B10"
890 dataWb2xlsx.Close savechanges:=False
End Sub

DocAElstein
11-18-2018, 06:06 PM
Second main Demo Code in support of this Thread:
http://www.excelfox.com/forum/showthread.php/2289-Named-Ranges-and-Named-Ranges-scope-Referencing-a-named-range
For Posts from:
http://www.excelfox.com/forum/showthread.php/2289-Named-Ranges-and-Named-Ranges-scope-Referencing-a-named-range?p=10819#post10819




Sub FoxyMultiCellNamedRanges()
10 Rem -2 Range Info etc.
20 Dim WbMain As Workbook, dataWb1xls As Workbook, dataWb2xlsx As Workbook
30 Set WbMain = Workbooks("MasturFile.xlsm") 'Set WbMain = ThisWorkbook
40 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
50 Set dataWb1xls = Workbooks("Data1.xls")
60 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
70 Set dataWb2xlsx = Workbooks("Data2.xlsx")
80 '
90 Dim LisWkBkPath As String: Let LisWkBkPath = "=" & "'" & ThisWorkbook.Path & "\"
100 '-2b) Some variables to hold a full reference string which we will use in places where we might need any of these variations for a cell reference Sheet7!B5 [myWorkbook.xlsm] Sheet4!B5 'G:\Desktop\MyFolder\[DataFile.xlsx]Tabelle1'!B5 The last one is the form we hold in the variables. Excel and Excel VBA , usually has no issues if you use the full reference in situations where one of the shorter versions may have been sufficient. But on the other hand, you may get unexpected problems if you used a shorter version , and Excel then guesses wrongly for the remaining part, which I believe it always adds internally, ( possibly at some compiling stage ) , before it uses it.
110 Dim MBkTab1B5 As String ' To hold full string reference to B5 in Master Workbook
120 Let MBkTab1B5 = "=" & "'" & ThisWorkbook.Path & "\" & "[" & "MasturFile.xlsm" & "]" & "Tabelle1" & "'" & "!" & "B5"
130 Dim Dat1Tab1B5 As String ' B5 in data1 workbook
140 Let Dat1Tab1B5 = "=" & "'" & ThisWorkbook.Path & "\" & "[" & "Data1.xls" & "]" & "Tabelle1" & "'" & "!" & "B5"
150 '
160 Rem -1 Error handler
170 On Error GoTo ErrorHandlerCodeSection:
180 GoTo PastErrorHandler
190 ErrorHandlerCodeSection:
200 MsgBox prompt:="Code errored at line " & Erl & " , error was:" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
210 Debug.Print Err.Number & " " & Err.Description
220 Resume Next
230 PastErrorHandler:
240 Rem 0 Clean up
250 '0a) remove any name objects made in last routine in the main file or the two data files
260 Dim WkBk As Workbook
270 For Each WkBk In Workbooks
280 Call FukYaWkBkNames(WkBk)
290 'Call GeTchaNms(280, WkBk)
300 Next WkBk
310 Workbooks("Data1.xls").Close savechanges:=True
320 Workbooks("Data2.xlsx").Close savechanges:=True
330 '0b) clear the entire data ranges in the first worksheet in the main workbook, both headers and data
340 ThisWorkbook.Worksheets.Item(1).Range("B5:C12").ClearContents
350 Rem _1) Data1 "Food" header
360 '1a) Data1 cell Workbook Scoped to its workbook : Info needed for a range in that data file is held in the workbooks name objects collection object of that workbook
370 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
380 Set dataWb1xls = Workbooks("Data1.xls") ' We need this open for the referred to range in the RefersTo:= range reference below
390 dataWb1xls.Names.Add Name:="Dta1Foodheader", RefersTo:=Application.Range(Dat1Tab1B5) ' A personal preference of mine is , once again, to use a full reference. This time it is in the Refers To range. This Refers To:= argument would never need the full file path reference, as the range referenced must be to a range in an open book. Never the less, as usual, VBA accepts the full reference
400 dataWb1xls.Close savechanges:=True ' I don't need the workbook open for the next line to work, but I made Added a named range object so I must save the changes for the next line to work as that named range is referenced
410 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "Data1.xls'!Dta1Foodheader" ' "Going" to Workbook Data1.xls
420 Let Application.Range(MBkTab1B5).Value = LisWkBkPath & "[Data1.xls]Tabelle4'!Dta1Foodheader" ' "Going" to any worksheet in Data1.xls
430 Rem 2 Experiments with named ranges in the LHS , like in Range("rngNamed") =
440 '2b) Workbooks Scope to main workbook: Info for named range is in Name Objects collection of Main workbook
450 WbMain.Names.Add Name:="MainFoodheader", RefersTo:=Application.Range(MBkTab1B5)
460 Let Application.Range(LisWkBkPath & WbMain.Name & "'!MainFoodheader").Value = LisWkBkPath & "Data1.xls'!Dta1Foodheader" ' LHS is going to workbook Data2.xlsx RHS is "Going" to Workbook Data1.xls
470 Rem 3 Bring in Header "Suppliment" from data 2 workbook directly without named ranges
480 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
490 Set dataWb2xlsx = Workbooks("Data2.xlsx") ' Needed for next line
500 Let Application.Range("=" & "'" & WbMain.Path & "\" & "[" & WbMain.Name & "]" & WbMain.Worksheets.Item(1).Name & "'" & "!" & "B10").Value = "=" & "'" & dataWb2xlsx.Path & "\" & "[" & dataWb2xlsx.Name & "]" & dataWb2xlsx.Worksheets.Item(1).Name & "'" & "!" & "B10"
510 '3b) "Fixed vector" B11 into main workbook at B11
520 Let Application.Range("=" & "'" & WbMain.Path & "\" & "[" & WbMain.Name & "]" & WbMain.Worksheets.Item(1).Name & "'" & "!" & "B11").Value = "=" & "'" & dataWb2xlsx.Path & "\" & "[" & dataWb2xlsx.Name & "]" & dataWb2xlsx.Worksheets.Item(1).Name & "'" & "!" & "B11"
530 '3c) "Fixed vector" B11 into main workbook into B11 C11 B12 and C12
540 Let Application.Range("=" & "'" & WbMain.Path & "\" & "[" & WbMain.Name & "]" & WbMain.Worksheets.Item(1).Name & "'" & "!" & "B11:C12").Value = "=" & "'" & dataWb2xlsx.Path & "\" & "[" & dataWb2xlsx.Name & "]" & dataWb2xlsx.Worksheets.Item(1).Name & "'" & "!" & "B11"
550 dataWb2xlsx.Close savechanges:=False
560 '
570 Application.Range("=" & "'" & WbMain.Path & "\" & "[" & WbMain.Name & "]" & WbMain.Worksheets.Item(1).Name & "'" & "!" & "B11:C12").ClearContents ' remove the data from the main file from data file 2 so as to do the same again using named ranges in the next code section, Rem 4
580 Rem 4 named ranges for data ranges in data workbooks and main file
590 '4a) Workbook to store name range object
600 Dim WbNmeObjs As Workbook
610 Workbooks.Open Filename:=ThisWorkbook.Path & "\StoredNamedRangeNameObjects.xls"
620 Set WbNmeObjs = Workbooks("StoredNamedRangeNameObjects.xls")
630 Call FukYaWkBkNames(WbNmeObjs)
640 Call GeTchaNms(640, WbNmeObjs)
650 '4b) named ranges for data in data range from data 1 workbook, "Data1.xls
660 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
670 Set dataWb1xls = Workbooks("Data1.xls") ' We need this open for the referred to range in the RefersTo:= range reference below
680 WbNmeObjs.Worksheets("DataFileNameObjects").Names.Add Name:="NmsObjDta1Data", RefersTo:=Application.Range("='" & ThisWorkbook.Path & "\[Data1.xls]Tabelle1'!B6:C7")
690 Call GeTchaNms(690, WbNmeObjs)
700 '4c) named ranges for data in data range from data 2 workbook, "Data2.xlsx
710 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
720 Set dataWb2xlsx = Workbooks("Data2.xlsx") ' We need this open for the referred to range in the RefersTo:= range reference below
730 WbNmeObjs.Worksheets("DataFileNameObjects").Names.Add Name:="NmsObjDta2Data", RefersTo:=Application.Range("='" & ThisWorkbook.Path & "\[Data2.xlsx]Tabelle1'!B11:C12")
740 Call GeTchaNms(740, WbNmeObjs)
750 '4d) named ranges for data import ranges in main workbook, ( This workbook )
760 '4d(i) data from Data 1 file import range in main book
770 WbNmeObjs.Worksheets("MainFileNameObjects").Names.Add Name:="NmsObjDta1Import", RefersTo:=Application.Range("='" & ThisWorkbook.Path & "\[MasturFile.xlsm]Tabelle1'!B6:C7")
780 '4d(ii) data from Data 2 file import range in main book
790 WbNmeObjs.Worksheets("MainFileNameObjects").Names.Add Name:="NmsObjDta2Import", RefersTo:=Application.Range("='" & ThisWorkbook.Path & "\[MasturFile.xlsm]Tabelle1'!B11:C12")
800 Call GeTchaNms(800, WbNmeObjs)
810 ' Close data books - I don't need them open to get at their named range data or their named range data
820 dataWb1xls.Close savechanges:=False ' I needed the workbook open for the referes to range reference and the GeTchaNms( ) to work, but i added no names to it, so I did not intentiionally make any changes, so I will close with changes false in case I acidentally changed anything
830 dataWb2xlsx.Close savechanges:=False ' I needed the workbook open for the referes to range reference and the GeTchaNms( ) to work, but i added no names to it, so I did not intentiionally make any changes, so I will close with changes false in case I acidentally changed anything
840 Rem 5 Using the Added data named ranges to bring in data from the data files into the main workbook
850 '5a) Food data data range ( B6:C7 in main File and B6:C7 in data 1 file )
860 Let Application.Range("='" & ThisWorkbook.Path & "\[StoredNamedRangeNameObjects.xls]MainFileNameObjects'!NmsObjDta1Import").FormulaArray = "='" & ThisWorkbook.Path & "\[StoredNamedRangeNameObjects.xls]DataFileNameObjects'!NmsObjDta1Data"
870 '5a)(ii) As file "StoredNamedRangeNameObjects.xls" is open we can also use
880 Let Application.Range("='[StoredNamedRangeNameObjects.xls]MainFileNameObjects'!NmsObjDta1Import").FormulaArray = "='[StoredNamedRangeNameObjects.xls]DataFileNameObjects'!NmsObjDta1Data"
890 '5b) Food data data range ( B11:C12 in main File and B11:C12 in data 2 file )
900 Let Application.Range("='" & ThisWorkbook.Path & "\[StoredNamedRangeNameObjects.xls]MainFileNameObjects'!NmsObjDta2Import").FormulaArray = "='" & ThisWorkbook.Path & "\[StoredNamedRangeNameObjects.xls]DataFileNameObjects'!NmsObjDta2Data"
910 '5b)(ii) As file "StoredNamedRangeNameObjects.xls" is open we can also use
920 Let Application.Range("='[StoredNamedRangeNameObjects.xls]MainFileNameObjects'!NmsObjDta2Import").FormulaArray = "='[StoredNamedRangeNameObjects.xls]DataFileNameObjects'!NmsObjDta2Data"
930 '5c)
940 WbNmeObjs.Close savechanges:=True ' Save the named range info on closing
950 '5d) Optional Change all formulas to their values
960 Let WbMain.Worksheets.Item(1).UsedRange.Value = WbMain.Worksheets.Item(1).UsedRange.Value
970 Rem 6 Final check of all named ranges
980 '6a) Open all workbooks so as to access Named range objects in them
990 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data1.xls"
1000 Set dataWb1xls = Workbooks("Data1.xls")
1010 Workbooks.Open Filename:=ThisWorkbook.Path & "\Data2.xlsx"
1020 Set dataWb2xlsx = Workbooks("Data2.xlsx")
1030 Workbooks.Open Filename:=ThisWorkbook.Path & "\StoredNamedRangeNameObjects.xls"
1040 Set WbNmeObjs = Workbooks("StoredNamedRangeNameObjects.xls")
1050 '6b) Loop through all open workbooks and check named range object info
1060 Dim Wbtemp As Workbook
1070 For Each Wbtemp In Workbooks ' Going through each workbook in the Workbooks collection object of open workbooks
1080 Call GeTchaNms(1080, Wbtemp)
'1085 If Wbtemp.Name <> ThisWorkbook.Name Then Wbtemp.Close savechanges:=False ' Close all but this workbook - can't do this here - I might need them in the next use of GeTchaNms
1090 Next Wbtemp
'close workbooks
1100 For Each Wbtemp In Workbooks ' Going through each workbook in the Workbooks collection object of open workbooks
1110 If Wbtemp.Name <> ThisWorkbook.Name Then Wbtemp.Close savechanges:=False ' Close all but this workbook
1120 Next Wbtemp

End Sub

DocAElstein
11-18-2018, 06:08 PM
Support Called routines for Thread:
http://www.excelfox.com/forum/showthread.php/2289-Named-Ranges-and-Named-Ranges-scope-Referencing-a-named-range




Sub FukYaWkBkNames(ByVal WnkBuk As Workbook)
Dim Nme As Name
For Each Nme In WnkBuk.Names
Nme.Delete
Next Nme
End Sub
Sub GeTchaNms(ByVal CodLn As Long, ByVal WnkBuk As Workbook) ' To get info aboout all Name objects in a Workbook,m WnkBuk
Dim Cnt As Long, Nme As Name, strOut As String
' Name objects in Workbook Names Colection object (Workbooks scope and Worksheets scope)
For Each Nme In WnkBuk.Names ' For convenience it goes through the Workbook named objects collection object for a workbook, as this has "its own" named range objects, that is to say the Workbooks scoped named range objects, and also the named range objects for all the worksheets. So I do not need to go through the named range objects collection object of every worksheet in that workbook separately for every worksheet.
Let Cnt = Cnt + 1 ' A simple count number of each workbooks collection names objects in order it finds in looping them
' We look now for a "!" in the string name, ... Excel adds a bit onto the name we give to a name Added to a Worksheet’s named objects collection ( Scoped to a Worksheet’s named objects collection = worksheet “scoping” We scoped to the Names object of a particular Worksheet = We Added the named range Name object to the names objects collection object of that particular Worksheet( and also indirectly the names objects collection object of the workbook in which that worksheet is) = We scoped that named range to that Workbook = That named range has Workbook Scope ). That added bit is something like “Sheet1!” . In other words, if you had given Name:=”MyName” in a code line for a worksheets scope Named range object Addition, like, …_ Worksheets("Sheet2").Names.Add Name:="FoodHeader", RefersTo:=____ _.. Then excel seems to hold and use a name like “Sheet2!FoodHeader"
If InStr(1, Nme.Name, "!", vbBinaryCompare) > 0 Then ' A name for a worksheet scope, has an extra bit added onto the name we gave it which includes a "!"
Let strOut = strOut & Cnt & " Name object Name is """ & Nme.Name & """" & vbCrLf & "(you gave """ & Mid(Nme.Name, 1 + InStr(1, Nme.Name, "!", vbBinaryCompare)) & """)" & vbCrLf & "It has worksheet scope and" & vbCrLf & "it refers to range """ & Nme.RefersTo & """" & vbCrLf & "and if in a spreadsheet formula you only want to use" & vbCrLf & """" & Mid(Nme.Name, 1 + InStr(1, Nme.Name, "!", vbBinaryCompare)) & """ without any preceding info about" & vbCrLf & "where that named range is," & vbCrLf & "then you must be in spreadsheet with tab name """ & Nme.Parent.Name & """" & vbCrLf & "If you want to be sure to access this named range from anywhere," & vbCrLf & "you should use """ & "=" & "'" & WnkBuk.Path & "\" & "[" & WnkBuk.Name & "]" & Nme.Parent.Name & "'" & "!" & Mid(Nme.Name, 1 + InStr(1, Nme.Name, "!", vbBinaryCompare)) & """"
If Nme.Parent.Name <> Application.Range(Nme.RefersTo).Parent.Name Then Let strOut = strOut & vbCrLf & "Note: The refered to range is in worksheet """ & Application.Range(Nme.RefersTo).Parent.Name & """"
If Nme.Parent.Parent.Name <> Application.Range(Nme.RefersTo).Parent.Parent.Name Then Let strOut = strOut & vbCrLf & "Note also: The refered to range is in File """ & Application.Range(Nme.RefersTo).Parent.Parent.Name & """"
Else ' Assume we have a workbook scoped name... we will see that a name for a workbook scope, remains just as we gave it
Let strOut = strOut & Cnt & " Name object Name is """ & Nme.Name & """ (the same as you gave)" & vbCrLf & "It has workbook scope and" & vbCrLf & "it refers to range """ & Nme.RefersTo & """" & vbCrLf & "and if in a spreadsheet formula you only want to use" & vbCrLf & """" & Nme.Name & """" & vbCrLf & "with no preceding info " & vbCrLf & "about where that named range is," & vbCrLf & "then you must be in any spreadsheet in workbook """ & Nme.Parent.Name & """" & vbCrLf & "If you want to be sure to access this named range from anywhere," & vbCrLf & "you should use """ & "=" & "'" & WnkBuk.Path & "\" & WnkBuk.Name & "'" & "!" & Nme.Name & """" & vbCrLf & "or alternatively use a similar string like this with any of the worksheets in it:" & vbCrLf & """" & "=" & "'" & WnkBuk.Path & "\" & "[" & WnkBuk.Name & "]" & WnkBuk.Worksheets.Item(1).Name & "'" & "!" & Nme.Name & """"
If WnkBuk.Name <> Nme.Parent.Name Then Let strOut = strOut & vbCrLf & "Note the refered to range is in" & vbCrLf & """" & Application.Range(Nme.RefersTo).Parent.Parent.Name & """ worksheets """ & Application.Range(Nme.RefersTo).Parent.Name & """ !!"
End If
Let strOut = strOut & vbCrLf & vbCrLf & vbCrLf ' To clearly seperate each name object
Next Nme
If strOut = "" Then
MsgBox prompt:="The workbooks names object collection object is empty," & vbCrLf & "and so there are no named range objects in" & vbCrLf & "workbook """ & WnkBuk.Name & """", Title:="At " & CodLn & " , for File """ & WnkBuk.Name & """": Debug.Print "'_= ========" & vbCrLf & "You have no named range Name objects in workbook " & WnkBuk.Name & vbCrLf & vbCrLf
Else
MsgBox prompt:=strOut, Title:="At " & CodLn & " , """ & WnkBuk.Name & """ Names Collection has:-": Debug.Print "'_= ========" & vbCrLf & "You have " & Cnt & " named range Name objects in workbook " & WnkBuk.Name & vbCrLf & strOut
End If
End Sub

DocAElstein
11-18-2018, 06:21 PM
In support of this post:
http://www.excelfox.com/forum/showthread.php/2289-Named-Ranges-and-Named-Ranges-scope-Referencing-a-named-range?p=10814#post10814


_____ Workbook: MasturFile.xlsm ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1


2


3


4NutritionEnergy


5Food


6Orange
50


7Apfel
60


8


9


10Suppliment


11BCAA
398


12EAA
400


13


14


15
Worksheet: Tabelle1

DocAElstein
11-20-2018, 06:12 PM
I am trying to do 2 things: Use 2 named ranges.. One works. The other doesn’t.
I have made a demo to help explain my problem
I have 3 Files: I have a Main Excel workbook file, usually open, and two other files, usually closed
_Main File is:- “Main.xls” https://app.box.com/s/u8yy4rcqg0eglvy362v13hyro8cgd9n7 – - This is usually open. It has all my codes in it
_A DataFile is:- “ClsdData.xls.” https://app.box.com/s/65w1hnih1vvay70vtdzk3da50we3gxvh – This is usually closed. It has 2 data ranges and one named range name object in it
ClsdDataDataRanges.JPG : https://imgur.com/vs0vX0G
_____ Workbook: ClsdData.xls ( Using Excel 2007 32 bit )
Row\Col
A
B
C

1dataA1dataB1


2
Worksheet: DataSht_1

_A third file is:- “NameObjectFile.xls” https://app.box.com/s/wsxycb3t2y1hmv0wr12cqav0qlcytzjn – This is usually closed, ( preferably ). It only has a named range name object in it

So the goal is to have a main file, “Main.xls” open whilst the files “ClsdData.xls.” and “NameObjectFile.xls” are closed, and from a code in the main file, “Main.xls” , put formulas of this sort of form in the first two cells of the main workbook.
NamedRangeReferrenceFormulasPutInMainFile.JPG : https://imgur.com/1wDM3ug
_____ Workbook: Main.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1= ' C: \ FolderPath \ [ClsdData.xls] DataSht_1 ' ! NameForDataSht_1A1 = ' C: \ FolderPath \ [NameObjectFile.xls] NameObjectsSht_1 ' ! NameForDataSht_1B1
Worksheet: Tabelle1
Those formulas “go” to the name objects of the named ranges with string names:
“ NameForDataSht_1A1” referring to the range of data file first cell ,
and
“NameForDataSht_1B1” referring to the range of data file second cell
The result of those formulas should then be to have the actual seen values in those two cells as:
MainFileDataIn.JPG : https://imgur.com/vQlhedZ
_____ Workbook: Main.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1dataA1dataB1
Worksheet: Tabelle1
( I have determined that, contrary to much literature, you can actually access a named range from anywhere as long as you include the full path and full string range name: the so called “scope” only determines the default path that Excel uses if you only give the string range name )

_._____________________
Demo Code:
(This code is in File: “Main.xls” )
With all the files in the same Folder, this code can be used to make the two named range Name objects. ( I put one named range Name object in the first worksheet of the file: “ClsdData.xls” and the other named range Name object in the first worksheet of the file: “NameObjectFile.xls” ).
The code also tries to access the first two cells values from the closed workbook using named ranges in these two code lines: The code lines put in those two long named range reference formulas

'_1
Workbooks("Main.xls").Worksheets.Item(1).Range("A1").Value = "='" & ThisWorkbook.Path & "\[ClsdData.xls]DataSht_1'!NameForDataSht_1A1"
and

'_2
Workbooks("Main.xls").Worksheets.Item(1).Range("B1").Value = "='" & ThisWorkbook.Path & "\[NameObjectFile.xls]NameObjectsSht_1'!NameForDataSht_1B1".
Those are the two things I am trying to do.
That last code line fails.
That last code line does not fail if I have the workbook “NameObjectFile.xls” open
Full Code:
Sub Make2NamedRangeObjectsAndTryToUseEm()
' scope named range to first worksheet's collection of Name objects object of Workbook "ClsdData.xls"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "ClsdData.xls"
'Let Workbooks("ClsdData.xls").Worksheets.Item(1).Name = "DataSht_1"
Workbooks("ClsdData.xls").Worksheets("DataSht_1").Names.Add Name:="NameForDataSht_1A1", RefersTo:=Workbooks("ClsdData.xls").Worksheets("DataSht_1").Range("A1")
Workbooks("ClsdData.xls").Close savechanges:=True ' Save Added name object
'_1 access first cell in closed data workbook from main file using named range name object with string name "NameForDataSht_1A1
Let Workbooks("Main.xls").Worksheets.Item(1).Range("A1").Value = "='" & ThisWorkbook.Path & "\[ClsdData.xls]DataSht_1'!NameForDataSht_1A1"
Workbooks("Main.xls").Save
' scope named range to first worksheet's collection of Name objects object of Workbook "NameObjectFile.xls "
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "NameObjectFile.xls"
'Let Workbooks("NameObjectFile.xls").Worksheets.Item(1).Name = "NameObjectsSht_1"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "ClsdData.xls" ' Needed for RefersTo below
Workbooks("NameObjectFile.xls").Worksheets("NameObjectsSht_1").Names.Add Name:="NameForDataSht_1B1", RefersTo:=Workbooks("ClsdData.xls").Worksheets("DataSht_1").Range("B1")
Workbooks("ClsdData.xls").Close savechanges:=False ' No changes made - was only needed for RefersTo above
Workbooks("NameObjectFile.xls").Close savechanges:=True ' Save Added name object
'_2 access second cell in closed dataworkbook from main file using named range name object with string NameForDataSht_1B1
Let Workbooks("Main.xls").Worksheets.Item(1).Range("B1").Value = "='" & ThisWorkbook.Path & "\[NameObjectFile.xls]NameObjectsSht_1'!NameForDataSht_1B1"

End Sub
_.__________
Let me put again into words what I am doing. I am doing two things:

'_1 This works: I have a closed data workbook, ("ClsdData.xls" ). That has a named range, ( string name is “NameForDataSht_1A1” ) . That name, “NameForDataSht_1A1” , is for the first cell in that closed data workbook, ("ClsdData.xls" ). That named range is scoped to the first worksheet in that closed data file, (closed data workbook, ("ClsdData.xls" ) . In other words, the named range object with string name “NameForDataSht_1A1” is in the first worksheets name objects collection of the closed data workbook ( "ClsdData.xls" ). This named range object with string name “NameForDataSht_1A1” refers to the first cell, A1, in the closed data workbook, ("ClsdData.xls" ).

'_2 This does not work , ( unless file "NameObjectFile.xls" is open ). I am using a file, ( "NameObjectFile.xls" ), only for holding name range objects. It has one named range name object in it which has the string name "NameForDataSht_1B1". This is the name range object for the second cell in the closed data workbook, ("ClsdData.xls" ). In other words, the named range object with string name “NameForDataSht_1B1” is in the first worksheets name objects collection of the workbook “NameObjectFile.xls”. This named range object with string name “NameForDataSht_1B1” refers to the second cell, B1, in the closed data workbook, ("ClsdData.xls" ).

I don’t understand yet why '_2 does not work. I am not totally sure why '_1 does work either.
I guess I don’t really understand exactly what I am doing. I don’t really understand what is really going on in the two cases.

I am thinking that I should be able somehow to get the string reference information that I require , that is to say, for the right hand side of the last equation I have this:
"='" & ThisWorkbook.Path & "\[NameObjectFile.xls]NameObjectsSht_1'!NameForDataSht_1B1"
But somehow I am thinking that I should be able to get the referred to string reference of
"='" & ThisWorkbook.Path & "\ [ClsdData.xls]DataSht_1'!$A$1"

DocAElstein
11-20-2018, 09:44 PM
I did this..
Took file “NameObjectFile.xls”,
first save as .xlsx,
then save as .zip ( “NameObjectFile - Kopie.zip” : https://app.box.com/s/ih9k6o7s5f3vkb21jyyso0mcqoh82isb )
and then double click on it and get this: NameObjectFile_xls_xlsx_zip.JPG : https://imgur.com/iAVFSOh




I get stuff like this:
_____ Workbook: Main.xls ( Using Excel 2007 32 bit )

NameObjectsFileAsZipNameObjectsFileAsZip

[Content_Types].xml



NameObjectsFileAsZip\docPropsdocProps

app.xml

core.xml

thumbnail.wmf



NameObjectsFileAsZip\xlxl

styles.xml

workbook.xml



NameObjectsFileAsZip\xl\externalLinksexternalLinks

externalLink1.xml



NameObjectsFileAsZip\xl\externalLinks\_rels_rels

externalLink1.xml.rels



NameObjectsFileAsZip\xl\themetheme

theme1.xml



NameObjectsFileAsZip\xl\worksheetsworksheets

sheet1.xml



NameObjectsFileAsZip\xl\_rels_rels

workbook.xml.rels



NameObjectsFileAsZip\_rels_rels

.rels
Worksheet: NameObjectsFileAsZip

NameObjectsFileAsZip_NameObjectsFileAsZip
_____________________[Content_Types].XML Content Types--xml.jpg . https://imgur.com/n9FQUxR
________________
NameObjectsFileAsZip\docProps_______docProps docProps.JPG : https://imgur.com/SRBBdyg
____________________________________app.XML app xml.JPG : https://imgur.com/qeeWrpm
____________________________________core.XML core xml.JPG : https://imgur.com/jZ3iSo7
____________________________________thumbnail.wmf
________________
NameObjectsFileAsZip\xl_____________xl xl.JPG : https://imgur.com/408pO7A
____________________________________Styles.XML styles xml.JPG : https://imgur.com/71fDgcw
____________________________________Workbook.XML workbook xml.JPG : https://imgur.com/AJ3et9N
________________
NameObjectsFileAsZip\xl\externalLinks___________ex ternalLinks externalLinks.JPG : https://imgur.com/SPj3lZY
________________________________________________ex ternalLink1.XML externalLink1 xml rels.JPG : https://imgur.com/qHnFz7u
________________
NameObjectsFileAsZip\xl\externalLinks\_rels_______ _______rels _ rels.JPG : https://imgur.com/GwEBoFG
__________________________________________________ _______externalLink1.XML.rels externalLink1 xml rels.JPG : https://imgur.com/qHnFz7u
________________
NameObjectsFileAsZip\xl\theme___________________th eme theme.JPG : https://imgur.com/KyceI30

________________________________________________th eme1.XML theme1 xml.JPG : https://imgur.com/hGgsgOQ
________________
NameObjectsFileAsZip\xl\worksheets______________wo rksheets worksheets.JPG : https://imgur.com/D8hqFpr
________________________________________________sh eet1.XML Sheet1 xml.JPG : https://imgur.com/ycxiL62
________________
NameObjectsFileAsZip\xl\_rels____________________r els _ rels.JPG https://imgur.com/u84DcoX

________________________________________________Wo rkbook.XML.rels workbook xml rels.JPG : https://imgur.com/L8fNakM
________________
NameObjectsFileAsZip\_rels___________rels _rels.JPG https://imgur.com/Tahoick
____________________________________.rels rels.jpg . https://imgur.com/pWaSeIo

DocAElstein
11-21-2018, 02:02 AM
I took this, “ClsdData.xls” , saved it as “ClsdData.xlsx” ,
then changed it to “ClsdData.zip” ,
closed it,
then double clicked on it and get this:
ClsdDataZip.JPG : https://imgur.com/oUtHu34
I copied all that to one folder,
and put that Folder in another folder:
copied all that to one folder, and put that Folder in another folder.JPG : https://imgur.com/an58FA7
I ran the code Sub DoStuffInFoldersInFolderRecursion() which is in the uploaded version of “Main.xls” , and that gives a Folder and File tree something like this if you select one of the above folders when it asks you to select a Folder:
_____ Workbook: Main.xls ( Using Excel 2007 32 bit )





FolderForClsdDataZipContentsFolderForClsdDataZipCo ntents

[Content_Types].xml



FolderForClsdDataZipContents\docPropsdocProps

app.xml

core.xml

thumbnail.wmf



FolderForClsdDataZipContents\xlxl

sharedStrings.xml

styles.xml

workbook.xml



FolderForClsdDataZipContents\xl\themetheme

theme1.xml



FolderForClsdDataZipContents\xl\worksheetsworkshee ts

sheet1.xml



FolderForClsdDataZipContents\xl\_rels_rels

workbook.xml.rels



FolderForClsdDataZipContents\_rels_rels

.rels
Worksheet: ClsdDataZipTree



'FolderForClsdDataZipContents_FolderForClsdDataZip Contents
'__________________________[Content_Types].XML
'
'FolderForClsdDataZipContents\docProps_______docPr ops docProps.JPG : https://imgur.com/6i1gIK4
'____________________________________________app.X ML app XML.JPG : https://imgur.com/XxiZCL9
'____________________________________________core. XML core XML.JPG : https://imgur.com/BwQxqi6
'____________________________________________thumb nail.wmf
'
'FolderForClsdDataZipContents\xl_____________xl xl.JPG : https://imgur.com/YxJFYV4
'____________________________________________share dStrings.XML sharedStrings XML.JPG : https://imgur.com/7dSdvM6
'____________________________________________Style s.XML Styles XML.JPG : https://imgur.com/whytQOj
'____________________________________________Workb ook.XML Workbook XML.JPG: https://imgur.com/P3G2qNC
'
'FolderForClsdDataZipContents\xl\theme____________ theme theme.JPG : https://imgur.com/Vj2RSyM
'_________________________________________________ theme1.XML theme1 XML.JPG : https://imgur.com/zimRsPL
'
'FolderForClsdDataZipContents\xl\worksheets_______ worksheets worksheets.JPG : https://imgur.com/O8KBgSB
'_________________________________________________ sheet1.XML sheet1 XML.JPG : https://imgur.com/LWVPyXn
'
'FolderForClsdDataZipContents\xl\_rels____________ _rels xl_rels.JPG : https://imgur.com/fwYmQwR
'_________________________________________________ Workbook.XML.rels Workbook XML rels.JPG : https://imgur.com/NOxE816
'
'FolderForClsdDataZipContents\_rels___________rels _rels.JPG : https://imgur.com/RTVajJI
'____________________________________________.rels Dot rels.JPG : https://imgur.com/NOxE816

DocAElstein
11-21-2018, 06:13 PM
Summary of info in the XML files for "ClsdData.xls" and "NameObjectFile.xls"

app.xml
"ClsdData.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Properties xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes" xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"><TotalTime>0</TotalTime><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector baseType="variant" size="4"><vt:variant><vt:lpstr>Arbeitsblätter</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant><vt:variant><vt:lpstr>Benannte Bereiche</vt:lpstr></vt:variant><vt:variant><vt:i4>2</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector baseType="lpstr" size="3"><vt:lpstr>DataSht_1</vt:lpstr><vt:lpstr>DataSht_1!NameForDataSht_1A1</vt:lpstr><vt:lpstr>DataSht_1!Sht_1A1</vt:lpstr></vt:vector></TitlesOfParts><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>12.0000</AppVersion></Properties>
"NameObjectFile.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Properties xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes" xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"><TotalTime>0</TotalTime><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector baseType="variant" size="2"><vt:variant><vt:lpstr>Arbeitsblätter</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector baseType="lpstr" size="1"><vt:lpstr>NameObjectsSht_1</vt:lpstr></vt:vector></TitlesOfParts><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>12.0000</AppVersion></Properties>

_.________________________________________________ _________________

sharedStrings.XML
"ClsdData.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<sst uniqueCount="2" count="2" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">-<si><t>dataA1</t></si>-<si><t>dataB1</t></si></sst>

"NameObjectFile.xls"
-
_.________________________________________________ _____________________

workbook.xml
"ClsdData.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<workbook xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fileVersion rupBuild="4507" lowestEdited="4" lastEdited="4" appName="xl"/><workbookPr defaultThemeVersion="124226" codeName="DieseArbeitsmappe"/><bookViews><workbookView windowHeight="11535" windowWidth="14910" yWindow="30" xWindow="240"/></bookViews><sheets><sheet r:id="rId1" sheetId="1" name="DataSht_1"/></sheets><definedNames><definedName name="NameForDataSht_1A1" localSheetId="0">DataSht_1!$A$1</definedName><definedName name="Sht_1A1" localSheetId="0">DataSht_1!$A$1</definedName></definedNames><calcPr calcId="125725"/></workbook>

"NameObjectFile.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<workbook xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fileVersion rupBuild="4507" lowestEdited="4" lastEdited="4" appName="xl"/><workbookPr defaultThemeVersion="124226" codeName="DieseArbeitsmappe"/><bookViews><workbookView windowHeight="11535" windowWidth="14910" yWindow="30" xWindow="240"/></bookViews><sheets><sheet r:id="rId1" sheetId="1" name="NameObjectsSht_1"/></sheets><externalReferences><externalReference r:id="rId2"/></externalReferences><definedNames><definedName name="NameForDataSht_1B1" localSheetId="0">[1]DataSht_1!$B$1</definedName></definedNames><calcPr calcId="125725"/></workbook>


_.________________________________________________ __________________________________________

sheet1.XML
"ClsdData.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<worksheet xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetPr codeName="Tabelle1"/><dimension ref="A1:B1"/><sheetViews><sheetView workbookViewId="0" tabSelected="1"><selection sqref="B8" activeCell="B8"/></sheetView></sheetViews><sheetFormatPr defaultRowHeight="12" baseColWidth="10"/><sheetData><row r="1" spans="1:2"><c r="A1" t="s"><v>0</v></c><c r="B1" t="s"><v>1</v></c></row></sheetData><pageMargins footer="0.3" header="0.3" bottom="0.78740157499999996" top="0.78740157499999996" right="0.7" left="0.7"/></worksheet>

"NameObjectFile.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<worksheet xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetPr codeName="Tabelle1"/><dimension ref="A1"/><sheetViews><sheetView workbookViewId="0" tabSelected="1"/></sheetViews><sheetFormatPr defaultRowHeight="12" baseColWidth="10"/><sheetData/><pageMargins footer="0.3" header="0.3" bottom="0.78740157499999996" top="0.78740157499999996" right="0.7" left="0.7"/></worksheet>

_.________________________________________________ _______
Workbook.XML.rels
"ClsdData.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Id="rId3"/><Relationship Target="theme/theme1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Id="rId2"/><Relationship Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId1"/><Relationship Target="sharedStrings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Id="rId4"/></Relationships>

"NameObjectFile.xls"
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Target="theme/theme1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Id="rId3"/><Relationship Target="externalLinks/externalLink1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink" Id="rId2"/><Relationship Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId1"/><Relationship Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Id="rId4"/></Relationships>

DocAElstein
12-06-2018, 10:13 PM
Some notes to support other posts: A brief introduction to objects and class objects in VBA

This is to support a Tips and Tutorial on advanced Event coding. ( http://www.excelfox.com/forum/showthread.php/2294-WithEvents-of-Excel-Application-Events ) It is difficult to look at advanced events coding without hitting some fundamental ideas behind objects and class objects in VBA.

This thing, "Tabelle2" , ( https://imgur.com/hHHdxyD ) .._
2114 , _.. could loosely be described as a ""worksheet" object with a code in it"…

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then MsgBox prompt:="You just changed the value in the first cell in worksheet " & Me.Name & " in the Workbook " & Me.Parent.Name
End Sub
Right mouse click Or double click in VBA explorer Project window to get code module.JPG : https://imgur.com/gsz6s2N
That coding results in you getting a simple message if you change the value in the first worksheet cell :
Automatic message after change value in first cell .JPG : https://imgur.com/WFINlbq , https://imgur.com/hHHdxyD

_ The actual object: where what how to get at or change
_ what precisely/ physically any object is, is not precisely defined. Consequently what we actually use, and where, in order to "use" an object is somewhat abstract and can be different at different times or for different purposes. As example, In the code example above we were using the second worksheet in a workbook. That worksheet object could "physically" be described as the spreadsheet we "see" when clicking on the second tab. Writing into cells could be described as using the worksheet object. But you will see that in the simple routine above, we referred to the second worksheet object using ".Me" ( Me.JPG : https://imgur.com/R5nJ4n9 ). This is because the code module and code window shown in the screenshots above is also often considered to be that worksheet object. This should confuse you. The concept is not precise. I think possibly in the last 20 years there were too many people employed in the computer industry who had nothing to do. They may have gone a bit mad in their boredom.

_ Class. Class object
_ If we "go back up" the programming hierarchy from, say a worksheet, then we would often have a class object which could / is sometimes seen as actually physically being a Class code module. So that would be a code module similar "looking" to our worksheet code module, but placed somewhere further "up" the hierarchy. A "Class" in VBA is as vague a concept as most VBA stuff follows the word definition of something along the lines of a blueprint or template or Type.
One could thing of the Class as the instructions, as simple text , on how to build something, and a VBA object could be built following those instructions.
A Variable used for an object will generally need to be declared ( Dimed ) to a specific type, and early on in VBA programming one may have, unknowingly, used a Class without realising it, for example , in code lines like these , the word Range , refers to the class Range
Dim Rng As Range
_ Set Rng=Range("A1")
In general, any object will be of a certain type , and the coding or information needed to use those objects will to a large extent be contained in its class. This may or may not be "see able" or accessible to us: it may or may not have a class code module. Such a code module, if it exists, can , and often is, loosely define as that Class object and which we then may or may not be able to access, see and/ or change:…
Class Class object WorksheetType2.JPG : https://imgur.com/PPUfc2w
Class Class object.JPG : https://imgur.com/3WDRcpU
It is very confusing to try and get a clear picture of this structure in the VBA Project window because Microsoft Excel and Microsoft Excel VBA is a disorganised mess:
On the one hand: We see in the VB Editor VBA Project window the individual worksheet objects modules, but not the Class object module from which they "come".
On the other hand: We can add a Class module , which we see then in the VBA Project window, MakeClass.JPG: https://imgur.com/GoKHDoq , but usually we cannot see the individual objects which we make from that Class.

[Class "WorksheetType2" made by us, seen as module ] _ [Class "Worksheet" made by Microsoft, invisible to us ]
___ [ "ShTyp2_1" ] _ [ __ ] [ _ ] ….. ___________________________ ["Sheet1"] ["Tabelle2"] ["MySheet"] ["Sht_4"]…..

So we could make one of those Classes / class modules , for example from the VB Editor VBA Project window by selecting the appropriate right mouse click option… _..
InsertClassModule.JPG : https://imgur.com/vcZSEAj , https://imgur.com/u1orh81
_.. and change its name to, for example , WorksheetType2 via the VBA Project properties window
NameClass.JPG : https://imgur.com/S6u7Gbf
We could add some simple coding "within that object" to "make that object" , for example a simple "Name" Property.
BuildAClass.JPG : https://imgur.com/4WGRbDC
(There is no significance to what that Name Property for the Class WorksheetType2 is at this stage. For the Class Worksheet the Name property is given further significance due to other coding in the Worksheet Class module which we do not have any access to. )

Class Module, Named by us - "WorksheetType2"

' Class (Modules) : https://www.youtube.com/watch?v=jHa8W52mD1k&index=65&list=PLS7iHfqXNVhK3yzd_4XS5k4zsvnu2mkJC : https://www.youtube.com/watch?v=MjbmsVDnAL0
Public Name As String
We can then use that class "WorksheetType2" in a similar way to which we use the existing class "Worksheet". We even get the options added to the intellisense drop down lists:
SimpleWorksheetNamingCode.jpg : https://imgur.com/5pYovYt
SimpleWorksheetNamingCode .jpg : https://imgur.com/v8ZUVVx
So in any code module, we can now do like:

Sub NameAWsType2()
' Make a Worksheet object
Dim Ws4 As Worksheet
Set Ws4 = Worksheets.Item(4)
' Make a WorksheetType2 object
Dim WsTyp2 As WorksheetType2
Set WsTyp2 = New WorksheetType2
' Name the worksheets
Let Ws4.Name = "Sht_4"
Let WsTyp2.Name = "ShTyp2_1"
' Access the names
MsgBox prompt:=Ws1.Name & vbCrLf & WsTyp2.Name
End Sub
The way that our given name WorksheetType2 is used in coding such as that above, supports the idea that in the case of a Class the code module itself can be thought of as the Class object

Just to help clarify. There will be somewhere "hidden" from us, a Worksheet class module, and that will include a vast amount of coding, some of which will include functions / methods which will be associated with the Worksheet Name Property. I guess if we had access to that it might be dangerous as we might change something that could cause a chaos somewhere, as other things will likely be organised in the Excel we use, based on how that coding is.
The word New "creates" an object (a process called instantiating ).
The internal coding which we have no access to will have created the Worksheets already "existing".
We have to do this instantiating for any objects we create, either
through instancing a Class which we have made, as we are discussing here
or
by accessing other objects not included as default in Excel, often referred to as Binding ( http://www.excelfox.com/forum/showthread.php/2240-VBA-referring-to-external-shared-Libraries-1)-Early-1-5)-Laterly-Early-and-2)-Late-Binding-Techniques )
As I am not allowed such access to the Worksheet class, I cannot use Set __ = New ___ , I can only assign a variable to the existing object like Set __ = ___

Finally, I try to here to sketch in
_ the "invisible" Class object module for the standard Excel worksheets,
and
_ two object modules for the objects I might "make" from the see able Class object module which we "made" with the coding above
Class Object Mess.JPG : https://imgur.com/r6hrPSK
2116

[Class Worksheet]_ [First worksheet object]
_____________________[Second worksheet object]

_ [Class WorksheetType2 ] __ [First object (ShTyp2_1)]
________________________________[Second object]

Also we have a code module, which is not so often called an object, and a Thisworkbook ( In German DieseArbeitsmappe ) code module usually regarded as an object.

It is a mess because it is a mess. :-)

Here is a special "Excel" file which I have which has 6 worksheets.
It has the Class object modules and object modules for
the Application Excel
and
the worksheets. ( Each worksheet has a Class object with just one worksheet "made" from it )
Alans Full Excel.JPG : https://app.box.com/s/iaozdmu9jhu33wo9r2ntcdhkkz1bwu9g , https://imgur.com/0k2NDVX
2115

[Class ExcelAppThisWorkbook] _ [ThisWorkbook object]

_[ Class Worksheet1 ] ________ [First worksheet object]

_ [Class Worksheet2 ] ________ [Second worksheet object ]

_ [Class Worksheet3 ] ________ [Third worksheet object]

_ [Class Worksheet4 ] ________[ Forth worksheet object]

_ [Class Worksheet5 ] ________ [Fifth worksheet object]

_ [Class Worksheet6 ] ________ [Sixth worksheet object]

_ [Class Worksheet7 ] ________ [Seventh worksheet object]





Ref
http://www.cpearson.com/excel/classes.aspx ( RiP Chip Pearson http://excelmatters.com/2018/04/30/rip-chip-pearson/ )

DocAElstein
12-09-2018, 08:40 PM
Code for this post:
http://www.eileenslounge.com/viewtopic.php?f=30&t=31395#p242918
















' Leave some lines free above
' http://www.eileenslounge.com/viewtopic.php?f=30&t=31395#p242918

Sub WotchaGotInHorizontalClit() 'Examine what is copied to clipboard from a row, and paste it into code module
Rem 0 Test range
Range("A1:C1").Value = Array("A1", "B1", "C1")
Rem 1 Clitbored
Range("A1:C1").Copy
Dim objDataObject As Object ' DataObject Late Binding equivalent ' http://excelmatters.com/2013/09/23/vba-references-and-early-binding-vs-late-binding/ http://www.excelfox.com/forum/showthread.php/2240-VBA-referring-to-external-shared-Libraries-1)-Early-1-5)-Laterly-Early-and-2)-Late-Binding-Techniques
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' http://excelmatters.com/2013/10/04/late-bound-msforms-dataobject/
objDataObject.GetFromClipboard
Dim strIn As String: Let strIn = objDataObject.GetText() 'String of range as held in clitbored
Rem 2 examine string from clitbored
Dim myLenf As Long: Let myLenf = Len(strIn)
Dim cnt As Long
For cnt = 1 To myLenf
Dim Caracter As Variant ' String
Let Caracter = Mid(strIn, cnt, 1)
Dim WotchaGot As String
If Caracter Like "[A-Z]" Or Caracter Like "[0-9]" Then ' Check for normal characters
Let WotchaGot = WotchaGot & """" & Caracter & """" & " & "
Else
Select Case Caracter
Case " "
Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case vbCr
Let WotchaGot = WotchaGot & "vbCr & "
Case vbLf
Let WotchaGot = WotchaGot & "vbLf & "
Case vbCrLf
Let WotchaGot = WotchaGot & "vbCrLf & "
Case """"
Let WotchaGot = WotchaGot & """" & """" & """" & " & "
Case vbTab
Let WotchaGot = WotchaGot & "vbTab & "
Case Else
WotchaGot = WotchaGot & """" & "SomeFink" & """" & " & "
'Let CaseElse = Caracter
End Select
End If
Next cnt
If WotchaGot <> "" Then Let WotchaGot = Left(WotchaGot, Len(WotchaGot) - 3) ' take off last " & "
MsgBox Prompt:=WotchaGot: Debug.Print WotchaGot
Rem 4 paste into code module
On Error Resume Next
ThisWorkbook.VBProject.VBComponents(Me.CodeName).C odeModule.AddFromString "Rem " & strIn ' a Rem is added to stop the code module showing red error
Set objDataObject = Nothing
End Sub

'
Sub WotchaGotInCodeWindowHorizontal() ' Examine first line of text in the code module
Rem 1 Put first line from code module into a string
Dim strVonCodMod As String
Let strVonCodMod = ThisWorkbook.VBProject.VBComponents(Me.CodeName).C odeModule.Lines(Startline:=1, Count:=1)
Let strVonCodMod = Replace(strVonCodMod, "Rem ", "", 1, -1, vbBinaryCompare)
Rem 2 examine string from code module line 1
Dim myLenf As Long: Let myLenf = Len(strVonCodMod)
Dim cnt As Long
For cnt = 1 To myLenf
Dim Caracter As Variant ' String
Let Caracter = Mid(strVonCodMod, cnt, 1)
Dim WotchaGot As String
If Caracter Like "[A-Z]" Or Caracter Like "[0-9]" Then
Let WotchaGot = WotchaGot & """" & Caracter & """" & " & "
Else
Select Case Caracter
Case " "
Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case vbCr
Let WotchaGot = WotchaGot & "vbCr & "
Case vbLf
Let WotchaGot = WotchaGot & "vbLf & "
Case vbCrLf
Let WotchaGot = WotchaGot & "vbCrLf & "
Case """"
Let WotchaGot = WotchaGot & """" & """" & """" & " & "
Case vbTab
Let WotchaGot = WotchaGot & "vbTab & "
Case Else
WotchaGot = WotchaGot & """" & "SomeFink" & """" & " & "
'Let CaseElse = Caracter
End Select
End If
Next cnt
If WotchaGot <> "" Then Let WotchaGot = Left(WotchaGot, Len(WotchaGot) - 3)
MsgBox Prompt:=WotchaGot: Debug.Print WotchaGot
Rem 3 clipbored
'3a Put string from first code module line in clipbored
Dim objDataObject As Object '
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObject.SetText strVonCodMod
objDataObject.PutInClipboard
Set objDataObject = Nothing
'3b paste string from first code module line into worksheet
Range("A1:C1").ClearContents
Paste Destination:=Range("A1")
Rem 4 Delete first line from code module
On Error Resume Next
ThisWorkbook.VBProject.VBComponents(Me.CodeName).C odeModule.DeleteLines Startline:=1, Count:=1
End Sub


'
Sub WotchaGotInVirticalClit() ''Examine what is copied to clipboard from a column, and paste it into code module
Rem 0 Test range
Dim WhoRay(1 To 3, 1 To 1) As String: Let WhoRay(1, 1) = "A1": Let WhoRay(2, 1) = "A2": Let WhoRay(3, 1) = "A3"
Let Range("A1:A3").Value = WhoRay
Rem 1 Clipboard
Range("A1:A3").Copy
Dim objDataObject As Object
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObject.GetFromClipboard
Dim strIn As String: Let strIn = objDataObject.GetText()
Rem 2 Examine string held in clipboard from a copy from a column
Dim myLenf As Long: Let myLenf = Len(strIn)
Dim cnt As Long
For cnt = 1 To myLenf
Dim Caracter As Variant ' String
Let Caracter = Mid(strIn, cnt, 1)
Dim WotchaGot As String
If Caracter Like "[A-Z]" Or Caracter Like "[0-9]" Then
Let WotchaGot = WotchaGot & """" & Caracter & """" & " & "
Else
Select Case Caracter
Case " "
Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case vbCr
Let WotchaGot = WotchaGot & "vbCr & "
Case vbLf
Let WotchaGot = WotchaGot & "vbLf & "
Case vbCrLf
Let WotchaGot = WotchaGot & "vbCrLf & "
Case """"
Let WotchaGot = WotchaGot & """" & """" & """" & " & "
Case vbTab
Let WotchaGot = WotchaGot & "vbTab & "
Case Else
WotchaGot = WotchaGot & """" & "SomeFink" & """" & " & "
Let CaseElse = Caracter
End Select
End If
Next cnt
If WotchaGot <> "" Then Let WotchaGot = Left(WotchaGot, Len(WotchaGot) - 3)
MsgBox Prompt:=WotchaGot: Debug.Print WotchaGot
Rem 4 Paste stringt from clipboard into top of code module
On Error Resume Next
ThisWorkbook.VBProject.VBComponents(Me.CodeName).C odeModule.AddFromString "Rem " & Replace(strIn, vbLf, vbLf & "Rem ", 1, 2, vbBinaryCompare)
Set objDataObject = Nothing
End Sub

Sub WotchaGotInCodeWindowVertical() ' Examins what is held in a code module after pasting in a column froma worksheet
Rem 1 Put first 4 lines from code module into a string
Dim strVonCodMod As String
Let strVonCodMod = ThisWorkbook.VBProject.VBComponents(Me.CodeName).C odeModule.Lines(Startline:=1, Count:=4)
Let strVonCodMod = Replace(strVonCodMod, "Rem ", "", 1, -1, vbBinaryCompare)
Rem 2 Examine contents of string
Dim myLenf As Long: Let myLenf = Len(strVonCodMod)
Dim cnt As Long
For cnt = 1 To myLenf
Dim Caracter As Variant ' String
Let Caracter = Mid(strVonCodMod, cnt, 1)
Dim WotchaGot As String
If Caracter Like "[A-Z]" Or Caracter Like "[0-9]" Then
Let WotchaGot = WotchaGot & """" & Caracter & """" & " & "
Else
Select Case Caracter
Case " "
Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case vbCr
Let WotchaGot = WotchaGot & "vbCr & "
Case vbLf
Let WotchaGot = WotchaGot & "vbLf & "
Case vbCrLf
Let WotchaGot = WotchaGot & "vbCrLf & "
Case """"
Let WotchaGot = WotchaGot & """" & """" & """" & " & "
Case vbTab
Let WotchaGot = WotchaGot & "vbTab & "
Case Else
WotchaGot = WotchaGot & """" & "SomeFink" & """" & " & "
'Let CaseElse = Caracter
End Select
End If
Next cnt
If WotchaGot <> "" Then Let WotchaGot = Left(WotchaGot, Len(WotchaGot) - 3)
MsgBox Prompt:=WotchaGot: Debug.Print WotchaGot
Rem 3 Clipboard
'3a Put string into clipboard
Dim objDataObject As Object '
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObject.SetText strVonCodMod
objDataObject.PutInClipboard
Set objDataObject = Nothing
'3b Paste into worksheet from clipboard
Paste Destination:=Range("A1")
Rem 4 Delet first 4 rows from code module
On Error Resume Next
ThisWorkbook.VBProject.VBComponents(Me.CodeName).C odeModule.DeleteLines Startline:=1, Count:=4
End Sub

DocAElstein
12-09-2018, 08:42 PM
Continued from above....


Sub Pubic_Properly_Let_RngAsString_() ' Examination of a range copied to clipboard, then paste to Private Class code module
Range("A1:C1").Value = Array("A1", "B1", "C1")
Range("A2:C2").Value = Array("A2", "B2", "C2")
Range("A3:C3").Value = Array("A3", "B3", "C3")
Range("A1:C3").Copy
Dim objDataObject As Object
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObject.GetFromClipboard
Dim strIn As String: Let strIn = objDataObject.GetText()
Dim myLenf As Long: Let myLenf = Len(strIn)
Dim cnt As Long
For cnt = 1 To myLenf
Dim Caracter As Variant ' String
Let Caracter = Mid(strIn, cnt, 1)
Dim WotchaGot As String
If Caracter Like "[A-Z]" Or Caracter Like "[0-9]" Then
Let WotchaGot = WotchaGot & """" & Caracter & """" & " & "
Else
Select Case Caracter
Case " "
Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case vbCr
Let WotchaGot = WotchaGot & "vbCr & "
Case vbLf
Let WotchaGot = WotchaGot & "vbLf & "
Case vbCrLf
Let WotchaGot = WotchaGot & "vbCrLf & "
Case """"
Let WotchaGot = WotchaGot & """" & """" & """" & " & "
Case vbTab
Let WotchaGot = WotchaGot & "vbTab & "
Case Else
WotchaGot = WotchaGot & """" & "SomeFink" & """" & " & "
End Select
End If
Next cnt
If WotchaGot <> "" Then Let WotchaGot = Left(WotchaGot, Len(WotchaGot) - 3)
MsgBox Prompt:=WotchaGot: Debug.Print WotchaGot: Debug.Print
MsgBox Prompt:=Replace(WotchaGot, "vbLf & ", "vbLf" & vbCrLf, 1, -1, vbBinaryCompare): Debug.Print Replace(WotchaGot, "vbLf & ", "vbLf" & vbCrLf, 1, -1, vbBinaryCompare): Debug.Print
MsgBox Prompt:=Replace(WotchaGot, "vbTab", """ | """, 1, -1, vbBinaryCompare): Debug.Print Replace(WotchaGot, "vbTab", """ | """, 1, -1, vbBinaryCompare): Debug.Print

Let strIn = Replace(strIn, vbTab, " | ", 1, -1, vbBinaryCompare) ' replace tab with |
MsgBox Prompt:=strIn: Debug.Print strIn

Let strIn = "Rem " & Replace(strIn, vbLf, vbLf & "Rem ", 1, 2, vbBinaryCompare) ' add some Rems to prevent red error in code window
Debug.Print
On Error Resume Next
ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule.AddFromString strIn
Set objDataObject = Nothing
End Sub

Sub Fumic_Properly_Get_Rng_AsString() ' Paste rworksheet range stored in code modulle back to worksheet
Range("A1:C3").ClearContents
'
Dim strVonCodMod As String
Let strVonCodMod = ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule.Lines(Startline:=1, Count:=4)
Let strVonCodMod = Replace(strVonCodMod, "Rem ", "", 1, -1, vbBinaryCompare)
Let strVonCodMod = Replace(strVonCodMod, " | ", vbTab, 1, -1, vbBinaryCompare)
Dim objDataObject As Object '
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObject.SetText strVonCodMod
objDataObject.PutInClipboard
Set objDataObject = Nothing
Paste Destination:=Range("A1")
On Error Resume Next
ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule.DeleteLines Startline:=1, Count:=4
End Sub


_.________________________________________________ ______________
Extra Codes For Yassers Normal Excel File, "NormalExcelFile.xlsm" : http://eileenslounge.com/viewtopic.php?f=30&t=31395#p242964

Option Explicit
Private Sub Publics_Probably_Let_RngAsString__() ' Input of range to Private Properties storage
Rem 0 test data range is selection. Select a range before running this code
Dim rngSel As Range: Set rngSel = Selection ' selected range for later reference
Rem 1 Copy range to clipbored
rngSel.Copy
Rem 2 put data currently in clipboard into a string
Dim objDataObject As Object ' DataObject ' This will be for an an Object from the class MS Forms. This will be a Data Object of what we "send" to the Clipboard. But it is a DataObject. It has the Methods I need to send to and get text to the Clipboard. ' http://excelmatters.com/2013/09/23/vba-references-and-early-binding-vs-late-binding/ http://www.excelfox.com/forum/showthread.php/2240-VBA-referring-to-external-shared-Libraries-1)-Early-1-5)-Laterly-Early-and-2)-Late-Binding-Techniques
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' http://excelmatters.com/2013/10/04/late-bound-msforms-dataobject/
objDataObject.GetFromClipboard ' The data object has the long text string from the clipboard at this point
'rngSel.ClearContents ' we can't do this here, not sure why??
Dim strIn As String: Let strIn = objDataObject.GetText() ' The string variable, strIn, is given the long string
rngSel.ClearContents ' do this now. (If we did it before, the contents of the clipboard are typically emptied, so that would be poo. I don't know why the clipboard needs to be full still fir the last code line??
Rem 3 manipulate string to substitute vbTab with arbritrary character combination - in next code this will be replaced. We do this because the vbTab is lost when pasting into a code module
Let strIn = Replace(strIn, vbTab, " | ", 1, -1, vbBinaryCompare) ' replacing( in the string , replace vbTab , with " | " , start at first position , replace all occurances , look for an excact case sensitive match as this is qiucker if we don't need to be case insensitive as with option vbTextCompare )
Let strIn = "'_-" & Replace(strIn, vbLf, vbLf & "'_-", 1, -1, vbBinaryCompare) ' add some comment bits to prevent red error in code window
Rem 4 add range data
Let strIn = "'_-Worksheets(""" & rngSel.Parent.Name & """).Range(""" & rngSel.Address & """)" & vbCrLf & strIn ' Add an extra first header line to indicate the worksheet and range used
On Error Resume Next ' I am not quite sure why this is needed
ThisWorkbook.VBProject.VBComponents("YassersDump").CodeModule.AddFromString strIn ' As far as i know, this adds from the start of the module.
Set objDataObject = Nothing ' This probably is not needed. It upsets Kyle when i do it, but he can take it :-)
End Sub

Private Sub Publics_Probably_Get_Rng__AsString() ' Output of range from Private Properties Storage
Rem 2 get string data form code module Private properties storage
Dim strVonCodMod As String
'2a Range infomation first line
Dim Ws As Worksheet, Rng As Range ' These will be used for the range identification infomation which the next code line gets from the first line in the code module used for the
Let strVonCodMod = ThisWorkbook.VBProject.VBComponents("YassersDump").CodeModule.Lines(Startline:=1, Count:=1) ' First line has the
Let strVonCodMod = Replace(Replace(Replace(strVonCodMod, "'_-Worksheets(""", ""), """).Range(""", " "), """)", "") ' we want to reduce and change like "Worksheets("Sht").Range("A1")" to "Sht A1" so that we can use split to get the Sheet name and the range address strVonCodMod = Replace(strVonCodMod, "'_-Worksheets(""", "") : strVonCodMod = Replace(strVonCodMod, """).Range(""", " ") : strVonCodMod = Replace(strVonCodMod, """)", "")
Set Ws = Worksheets(Split(strVonCodMod)(0)): Set Rng = Ws.Range(Split(strVonCodMod)(1)) ' The returned array from spliting by the space , " " , will have first element (indicie(0)) of like "Sht" and the second element (indicie(1)) of like "A1"
'2b get range data
Let strVonCodMod = ThisWorkbook.VBProject.VBComponents("YassersDump").CodeModule.Lines(Startline:=2, Count:=Rng.Rows.Count + 1) ' We need rows count+1 because there seems to be a last & vbCr & vbLf http://eileenslounge.com/viewtopic.php?f=30&t=31395#p242941
Let strVonCodMod = Replace(strVonCodMod, "'_-", "", 1, -1, vbBinaryCompare) ' remove the '_- Comment bits
Let strVonCodMod = Replace(strVonCodMod, " | ", vbTab, 1, -1, vbBinaryCompare) ' Replace the " | " with a carriage return
Rem 3 Put the string into the clipboard
Dim objDataObject As Object '
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObject.SetText strVonCodMod
objDataObject.PutInClipboard
Set objDataObject = Nothing
Rem 4 Output range data values to spreadsheet
Ws.Paste Destination:=Rng
Rem 5
On Error Resume Next
ThisWorkbook.VBProject.VBComponents("YassersDump").CodeModule.DeleteLines Startline:=1, Count:=Rng.Rows.Count + 1 + 1 ' remove the first header row and all data and the extra last row caused by the extra & vbCr & vbLf
End Sub



( XL2020alsm.xlsb https://app.box.com/s/26frr0zzc93q6zsraktove3qypqj714p )

DocAElstein
12-24-2018, 01:10 PM
Routine for following excelfox Thread:
http://www.excelfox.com/forum/showthread.php/2295-ExtendingInsensibility-into-Code-modules-Copy-table-contents-to-VBIDE-VB-Editor-code-modules?p=10863#post10863 ...



Sub PubProliferous_Let_RngAsString__() ' Make hardcopy of spreadsheet range to VB Editor insensibly http://www.eileenslounge.com/viewtopic.php?f=30&t=31395#p243002
Rem 0 VBA project instantiated VBIDE
Dim VBIDEVBAProj As Object ' For convenience a variable is used for this code module
Set VBIDEVBAProj = ThisWorkbook.VBProject.VBE.ActiveCodePane.codemodu le ' ThisWorkbook.VBProject.VBComponents(Me.CodeName) 'varible referring to this code module
Rem 1 Indicate that this module is being used for text.
If Not Right(VBIDEVBAProj.Name, 4) = "_txt" Then Let VBIDEVBAProj.Name = VBIDEVBAProj.Name & "_txt" ' If Not Right(Me.CodeName, 4) = "_txt" Then Let VBIDEVBAProj.Name = Me.CodeName & "_txt"
Rem 2 Selected range to clipboard
Dim rngSel As Range: Set rngSel = Selection: rngSel.Copy
Dim objDataObject As Object ' DataObject ' This will be for an an Object from the class MS Forms. This will be a Data Object of what we "send" to the Clipboard. But it is a DataObject. It has the Methods I need to send to and get text to the Clipboard. ' http://excelmatters.com/2013/09/23/vba-references-and-early-binding-vs-late-binding/ http://www.excelfox.com/forum/showthread.php/2240-VBA-referring-to-external-shared-Libraries-1)-Early-1-5)-Laterly-Early-and-2)-Late-Binding-Techniques
Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' http://excelmatters.com/2013/10/04/late-bound-msforms-dataobject/
objDataObject.GetFromClipboard ' The data object has the long text string from the clipboard at this point
Dim strIn As String: strIn = objDataObject.GetText() 'This gets the test string from the Data Object
' rngSel.ClearContents ' range is cleared after copying table values to clipboard
Rem 3
'3a) replace vbTab with "|" as cell divider to use in the VB editor range value display
Let strIn = Replace(strIn, vbTab, "|") ' : Call WotchaGot(strIn)
'3b) typically the last two "characters" from the text obtained from a spreadsheet range via the clipboard has a last vbCr & vbLf pair. We rely on this in further lines so this is just to be sure
If Not Right(strIn, 2) = vbCr & vbLf Then Let strIn = strIn & vbCr & vbLf ' Typically a last vbcr & vblf is there, and we rely on it, so we make sure here ###
Rem 4 add start and stop info
Let strIn = "'_-" & Format(Date, "DD MM YYYY") & " Worksheets(""" & rngSel.Parent.Name & """).Range(""" & rngSel.Address & """)" & vbCr & vbLf & strIn & "'_- EOF " & Format(Date, "DD MM YYYY") ' Note in last bit I am relying on having a vbcr & vbLf after existing strIn ###
Rem 5 Make array from string using the vbCr & vbLf pair as seperator. This willbe an array of data and the extra start and end rows
Dim SpltRws() As String: Let SpltRws() = Split(strIn, vbCr & vbLf, -1, vbBinaryCompare)
Rem 6 Determination of code module table characteristics
'6a) from split rows array, we can get the number of columns and rows
Dim RwCnt As Long, ClCnt As Long
Let RwCnt = (UBound(SpltRws()) - LBound(SpltRws())) + 1 ' Allow for any base
Dim SpltCls() As String: Let SpltCls() = Split(SpltRws(LBound(SpltRws()) + 1), "|", -1, vbBinaryCompare) ' assume second row is representative of all rows for column number
Let ClCnt = (UBound(SpltCls()) - LBound(SpltCls())) + 1
'6b) The next line is a way to make a free line... Because we give a line number in the argument .insertlines Line:= of greater than the current last line number, then that actual number given bears no relation to the actual line number of the code line at which it will be added. ( The line number of the code I am talking about here is , as defined by, or rather as held internally by, and accessed in code coding, by a sequential integer starting at 1 at the top of the code window and counting by +1 for every successive line/row ) Because we give a line number in the argument .insertlines Line:= of greater than the current last line number, then lines will always be added at the next free line, that is to say one line above the last used line. The actual number we give is irrelevant, for numbers we give which are greater than that of the current last used line in the code module.
VBIDEVBAProj.insertlines Line:=VBIDEVBAProj.countoflines + 9996, String:="" ' An attempt to insert a line anywhere above the last used line will force a new line at the end. So this is how we force a space. (Trying to insert a line anywhere above the last used line won't work.
'6c) Find next free row and last row that we will effectively use
Dim CdTblStt As Long, CdTblStp As Long ' these variables will actual hold our start and end lines, but when used below they actually force a new line by virtual of attempting to insert a line above the current last line
Let CdTblStt = VBIDEVBAProj.countoflines + 1 ' We find that + 1 or more will take us to the next free line. (We can insert below or equal to last used line and then all will be shifted up. If we add to the last line =___.CountOfLines then the last line will shift up. Effectively CdTblStt is the start row as it is one up from the last row. But if we used any number >=1 for the 1 , then the actual start line which we obtain would still be at .countoflines + 1
Let CdTblStp = CdTblStt + RwCnt - 1 ' last row in this code module to be used. In actual fact this nimber is what it will be. Effectively with using this later in our code, we try to insert at one line furthter than the last line. For any attempt at an insert >= .countoflines+1 we actually add a new line at the end.
Rem 7 Add lines from array to to code module , using some string formating http://www.excelfox.com/forum/showthread.php/2230-Built-in-VBA-methods-and-functions-to-alter-the-contents-of-existing-character-strings --- Dim TabulatorSyncrenator As String: Let TabulatorSyncrenator = "123456789" ' any lengthed string
'7a) Header
VBIDEVBAProj.insertlines Line:=CdTblStt, String:=SpltRws(LBound(SpltRws()))
'7b) Main looping Start for data rows ===============================
Dim Rws As Long
For Rws = CdTblStt + 1 To CdTblStp - 1 Step 1 ' At each row of data
Dim rvec As Long: Let rvec = -CdTblStt + LBound(SpltRws()) ' This gives the adjustment necerssary to take us from a code module line number to an array indicie in the range rows array, SpltRws(). This works as follows: Our used row number actually forces a new line which has that line number. For the relavant array line number, for example , the first line will need to be the first indicie. For zero base, we need to take off excactly CdTblStt For base 1 iwe need to take off 1 less, so rvec would be -(CdTblStt + 1)
Let SpltCls() = Split(SpltRws(Rws + rvec), "|", -1, vbBinaryCompare) 'Split each data row into data columns
'7c) to allow some formatting, a string is built up from each column/cell value
Dim Cls As Long
For Cls = LBound(SpltCls()) To UBound(SpltCls())
Dim TabulatorSyncrenator As String: Let TabulatorSyncrenator = "123456789" ' any lengthed string will do
LSet TabulatorSyncrenator = Trim(SpltCls(Cls)) ' this cause a number like " 56" to change to "56 " This allows us to have a fixed length format here in the displayed code editor
Dim LineAut As String
Let LineAut = LineAut & " | " & TabulatorSyncrenator ' : Debug.Print LineAut
Next Cls
Let LineAut = Replace(LineAut, " | ", "'_-", 1, 1, vbBinaryCompare) 'Replace first " | " with some sort of 'comment thing
VBIDEVBAProj.insertlines Line:=Rws, String:=LineAut ' Note: you could use any from and including one more than the last current line. - effectively here we always try to go >=+1, we are not really defining the line, but just making sure that we add on to the end. Effectively the number in the Line:= does become the line where the string is finally. But it is not directly defined by that.
Let LineAut = "" ' Ready for next line use
Next Rws ' End main data rows Loop ==============================
'7d) End row
VBIDEVBAProj.insertlines Line:=CdTblStp, String:=SpltRws(UBound(SpltRws())) ' Note: this line would not go further than last line, so it must be done here ***
End Sub

DocAElstein
12-24-2018, 01:12 PM
Routine for following excelfox Thread
http://www.excelfox.com/forum/showthread.php/2295-ExtendingInsensibility-into-Code-modules-Copy-table-contents-to-VBIDE-VB-Editor-code-modules?p=10864#post10864 .....






Sub PubProliferous_Get_Rng__AsString() ' This pastes out all held table range values in this code module
Rem 0 VBA project instantiated VBIDE
Dim VBIDEVBAProj As Object ' For convenience a variable is used for this code module
Set VBIDEVBAProj = ThisWorkbook.VBProject.VBE.ActiveCodePane.codemodu le ' ThisWorkbook.VBProject.VBComponents(Me.CodeName) 'varible referring to this code module
Rem 1 Do it all
Do: Dim EndOFSub As Boolean ' looping while not at End Sub =================================
Do: Dim FOB As Boolean ' looping while in range data ------------------------------
Dim ReedLineIn As String
If ReedLineIn = "" Then ' because there is no code line in the next line we will go to Let ReedLineIn = if the condition "" is met
'for an empty line we do nothing apart from having already deleted it ( for all but the first time here at the code start)
Else ' We are in data or start or stop-----------------|
Dim arrOut As String ' A string for output from clipboard for each found range
If Mid(ReedLineIn, 15, 12) = "Worksheets(""" Then ' we are at backward looping end(start) of data
Let ReedLineIn = Replace(Replace(Mid(ReedLineIn, 27), """).Range(""", " "), """)", "") 'Let ReedLineIn = Mid(ReedLineIn, 27): ReedLineIn = Replace(ReedLineIn, """).Range(""", " ", 1, 1, vbBinaryCompare): ReedLineIn = Replace(ReedLineIn, """)", "", 1, 1, vbBinaryCompare)
'MsgBox ReedLineIn: Debug.Print ReedLineIn ' ' This is particularly useful in developing codes of this nature, as usally step (F8) mode will often fail due to code lines referrencig this code module which trip up the process somehow
Dim Ws As Worksheet, Rng As Range 'variables to use for output range details
Set Ws = Worksheets(Split(ReedLineIn)(0)): Set Rng = Ws.Range(Split(ReedLineIn)(1)) ' The returned array from spliting by the space , " " , will have first element (indicie(0)) of like "Sheet1" and the second element (indicie(1)) of like "$B$1:$D$13"
' Section to prepare data for, and to do, the paste out of a data value range Output preparing section !!
'MsgBox arrOut: Debug.Print arrOut
Let arrOut = Replace(Replace(arrOut, "'_-", ""), " | ", vbTab) ' The "inner" Replace takes out the "'_-" bit at the start of a line, and the "outer" Replace changes the seperator used in the code module " | " for that which appears to be used by Excel to determine a cell "wall" vbTab
'MsgBox arrOut: Debug.Print arrOut
Let arrOut = Replace(arrOut, " ", "", 1, -1, vbBinaryCompare) ' this is intended as a partial solution to removing most of the extra spaces that we added, whilst not removing any intentionally there. You may want to adjust this along with the actual character used to fill in the unused spaces in oder to come up with a better solution to suit specific data types
'MsgBox arrOut: Debug.Print arrOut 'WotchaGot (arrOut) ' routine to examine contents of string
Dim objDataObject As Object: Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): objDataObject.SetText arrOut: objDataObject.PutInClipboard ' Text is given to Data object which in turn uses its method to put that in the clipboard
Ws.Paste Destination:=Rng 'Worksheets Paste method with optional argument to determine where, ( default would be from top left of active range )
Let arrOut = "" ' Clear the string to allow for collection of next range
If Right(VBIDEVBAProj.Name, 4) = "_txt" Then Let VBIDEVBAProj.Name = Replace(VBIDEVBAProj.Name, "_txt", "", 1, 1, vbBinaryCompare)
Else
' Section to collect the range value data ( If not at the end section of a data range held in the code window like '_- EOF 22 12 2018 )
If Left(ReedLineIn, 8) = "'_- EOF " Then '
' Let FOB = True ' Let FOB = True is not needed, as clearing the string arrOut effectively starts us again afresh
'for last data we do nothing apart from having already deleted it
Else ' from here we are in data collecting/concatanating into string arrOut +++++
Let arrOut = ReedLineIn & vbCr & vbLf & arrOut ' A simple concatenation along with a new line indicator will give a convenient format of the final data range for use in the Output preparing section !! above Note: we build the string "bachwards" with the next line as first and previous lies after it because the code is looping backwards
End If ' we were collecting/concatenating range value data +++++
End If
End If ' we are did stuff in data or start or stop-----|
Let ReedLineIn = VBIDEVBAProj.Lines(StartLine:=VBIDEVBAProj.countof lines, Count:=1)
If ReedLineIn = "End Sub" Or ReedLineIn = "End Function" Then
Let EndOFSub = True
Else ' after reading in any line, we delete it, unless it was the End of a routine
VBIDEVBAProj.DeleteLines StartLine:=VBIDEVBAProj.countoflines, Count:=1
End If
Loop While Not EndOFSub = True ' And FOB = False '------------------------------------
'MsgBox Prompt:="In between data ranges": Let FOB = False ' we could do something here to tell us we are in between range, such as count the ranges, and then set FOB back to zero
Loop While EndOFSub = False ' ================================================== ==============
End Sub



https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vOQApTgb (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vOQApTgb)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vbihZ-7W (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vbihZ-7W)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vfmpSO0F (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vfmpSO0F)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vjfTJ7lX (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vjfTJ7lX)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vmq-LHHz (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vmq-LHHz)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vst3j_7i (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9c-vst3j_7i)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwBqjIR5 Nj (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwBqjIR5 Nj)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwBw8El0 r5 (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwBw8El0 r5)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwC63GbR uM (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwC63GbR uM)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwC9fyKZ do (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwC9fyKZ do)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwCEn8DB Qe (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bwCEn8DB Qe)
https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bw0Bey8g QO (https://www.youtube.com/watch?v=nVy4GAtkh7Q&lc=UgxJGNhWFZh2p5mK0XB4AaABAg.9bbxud383FI9bw0Bey8g QO)
https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)

DocAElstein
12-24-2018, 01:16 PM
Routine for following excelfox Thread
http://www.excelfox.com/forum/showthread.php/2295-ExtendingInsensibility-into-Code-modules-Copy-table-contents-to-VBIDE-VB-Editor-code-modules?p=10865#post10865



Sub TestieCall()
Call PubeProFannyTeas__GLetner("23 12 2018")
End Sub
Sub PubeProFannyTeas__GLetner(ByVal strDte As String)
Rem 0 VBA project instantiated VBIDE
Dim VBIDEVBAProj As Object ' For convenience a variable is used for this code module
Set VBIDEVBAProj = ThisWorkbook.VBProject.VBE.ActiveCodePane.codemodu le ' ThisWorkbook.VBProject.VBComponents(Me.CodeName) 'varible referring to this code module
Rem 1 This code module data range
'1a) get full data range as string
Dim Cnt As Long, Lr As Long, ReedLineIn As String
Let Lr = VBIDEVBAProj.countoflines: Let Cnt = Lr + 1
Do
Let Cnt = Cnt - 1
Let ReedLineIn = VBIDEVBAProj.Lines(StartLine:=Cnt, Count:=1)
Loop While Not (Left(ReedLineIn, 7) = "End Sub" Or Left(ReedLineIn, 7) = "End Fun")
If Cnt = Lr Then MsgBox Prompt:="No range data values in code module " & VBIDEVBAProj.Name: Exit Sub
'1b) Complete data region as single string.
Dim strIn As String: Let strIn = VBIDEVBAProj.Lines(StartLine:=Cnt + 1, Count:=Lr - Cnt)
Let strIn = Mid(strIn, 3) ' take off first vbCr & vbLf
'WotchaGot (strIn)
'1c) split into date ranges, get most recent of any dates to match given strDte
Dim DtedRngs() As String: Let DtedRngs() = Split(strIn, vbCr & vbLf & vbCr & vbLf) ' Split range by empty line which is double vbCr & vbLf
'WotchaGot (DtedRngs(0)): Debug.Print: WotchaGot (DtedRngs(1))
For Cnt = UBound(DtedRngs()) To LBound(DtedRngs()) Step -1
'1d)Check for date match, if so the main code working begins
Dim FndDte As String: Let FndDte = Mid(DtedRngs(Cnt), 4, 10) ' looking at like this typical start of a data range, '_-23 12 2018 Wo.... we see that 10 characters from character 4 will give us the date
If FndDte = strDte Then
'MsgBox Prompt:=FndDte
Rem 2 manipulation of found date range
Dim strRng As String: Let strRng = DtedRngs(Cnt)
Let strRng = Mid(strRng, 27) 'takes off up to start of worksheet name... no speacial reason toher than why not? - its not needed anymore
'2a) range info
Dim RngInfo As String: Let RngInfo = Left(strRng, InStr(1, strRng, """)" & vbCr & vbLf, vbBinaryCompare) - 1) ' This gets us at like Tabelle1").Range("$I$2513:$J$2514
Dim ShtName As String, RngAdrs As String
Let ShtName = Split(RngInfo, """).Range(""", 2, vbBinaryCompare)(0) ' split above string , using as seperator ").Range(" , into 2 bits , for exact computer binary type compare Then we have first array element (indicie (0)) as the worksheet name and the second array element (indicie (1)) as the range address
Let RngAdrs = Split(RngInfo, """).Range(""", 2, vbBinaryCompare)(1) ': Debug.Print ShtName & " " & RngAdrs
Dim Ws As Worksheet, Rng As Range: Set Ws = Worksheets("" & ShtName & ""): Set Rng = Ws.Range(RngAdrs)
'2b) get data value range
Let strRng = Mid(strRng, InStr(1, strRng, vbCr & vbLf, vbBinaryCompare) + 2) ' take off first line & the first vbCr & vbLf
Let strRng = Left(strRng, InStr(1, strRng, "'_- EOF ", vbBinaryCompare) - 1) ' take off last line, ( but leave on the vbCr & vbLf as that seems to typically be on a string from an excel range
'WotchaGot strRng
Let strRng = Replace(strRng, " | ", vbTab, 1, -1, vbBinaryCompare) 'Change code window cell wall seperator for that used by Excel
Let strRng = Replace(strRng, "'_-", "", 1, -1, vbBinaryCompare)
Let strRng = Replace(strRng, " ", "", 1, -1, vbBinaryCompare) ' Bit of bodge to remove my added spaces
'Debug.Print strRng
Rem 3 output to worksheet
Dim objDataObject As Object: Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): objDataObject.SetText strRng: objDataObject.PutInClipboard ' Text is given to Data object which in turn uses its method to put that in the clipboard
Ws.Paste Destination:=Rng 'Worksheets Paste method with optional argument to determine where, ( default would be from top left of active range )
Exit Sub 'This code only gets the first found range looking from code window bottom
Else ' No matching date found yet, so do nothing but
End If ' go on to
Next Cnt ' next date range ' ( There is no check for no matching date. The code will simple end after all ranges have been looped through.)
End Sub

DocAElstein
12-30-2018, 08:47 PM
Code for Yassser here:
http://www.eileenslounge.com/viewtopic.php?f=30&t=31529#p243999



Option Explicit
'I have numbers from 1 to 2319 made in groups in different numbers (in ten groups) as shown in column F
'How can I get random distribution for those group to have the same range of numbers from 1 to 2319
'but in different order and at the same time to have the same number inside each group
'Example
'Group 6 from 1267 - 1489 >> the number inside that group is 223
'Suppose the random choice make this group the first one so the expected result would be 1 - 223
'
'then suppose the second selected group is group 8 which is 1699 - 1938 >> the number inside that group is 240
'So that new group in the expected result would start at 224
'(which is the last number in the previous result and the finish number would be 463
'
'...
'Is it possible to do that in random order?
'
Sub RandomDistribution4Numbers() ' http://www.eileenslounge.com/viewtopic.php?f=30&t=31529
Dim Ws1 As Worksheet: Set Ws1 = Worksheets("Sheet1")
Dim arrSN() As Variant: Let arrSN() = Ws1.Range("F2:F" & Ws1.Range("F" & Rows.Count & "").End(xlUp).Row & "").Value ' range of current SNs
Dim LstGrpStp As Long: Let LstGrpStp = 0 ' last number used at end of random number group
Dim arrGrpsOut() As String: ReDim arrGrpsOut(1 To UBound(arrSN(), 1), 1 To 1) ' Array for output values
Do ' we loop while we have not yet filled all of the output array, arrGrpsOut()
Dim Rnd1ToUBnd As Long ' For a random array indicie from 1 to the UBound "row" of the input, (and output), arraysd
Randomize: Let Rnd1ToUBnd = Int(UBound(arrSN(), 1) * Rnd) + 1
If arrGrpsOut(Rnd1ToUBnd, 1) = "" Then ' Not yet filled this element in output array, so do the main stuff
Dim OutElsFilled As Long: Let OutElsFilled = OutElsFilled + 1 ' count of number of outup array elements filled
' split F column (arrSN()) numbers to get range of numbers
Dim SpltRng() As String: Let SpltRng() = Split(arrSN(Rnd1ToUBnd, 1), " - ", 2, vbBinaryCompare)
Dim Rng As Long: Let Rng = SpltRng(1) - SpltRng(0) ' Range of numbers
Dim Stt As Long, Stp As Long: Let Stt = LstGrpStp + 1: Let Stp = LstGrpStp + Rng + 1 ' Start and stop of range of numbers
' build output array with the numbers
Let arrGrpsOut(Rnd1ToUBnd, 1) = Stt & " - " & Stp
Let LstGrpStp = Stp ' Last highest used number
Else ' If we come here then our random number must of been for an indicie of an array element already filled - so this probably makes the code a bit inefficient
End If
Loop While OutElsFilled < UBound(arrSN(), 1) ' we loop while we have not yet filled all of the output array, arrGrpsOut(), which is determined by if we did the main stuff as many times as there are elements in the input/Output arrays

Let Ws1.Range("G2").Resize(UBound(arrSN(), 1)).Value = arrGrpsOut
End Sub
'





Sub RandomizeGroups() ' Hans code ' http://www.eileenslounge.com/viewtopic.php?f=30&t=31529#p244006
Dim arr As Variant
Dim lb As Long
Dim ub As Long
Dim i As Long
Dim j As Long
Dim tmp As Long
Dim n As Long
Dim idx() As Long
Dim itm() As String
Dim grp() As String
arr = Range("F2:F11").Value
lb = LBound(arr, 1)
ub = UBound(arr, 1)
ReDim idx(lb To ub)
ReDim grp(lb To ub)
For i = lb To ub
idx(i) = i
Next i
For i = lb To ub
j = Application.RandBetween(lb, ub)
tmp = idx(i)
idx(i) = idx(j)
idx(j) = tmp
Next i
n = 1
For i = lb To ub
itm = Split(arr(idx(i), 1), " - ")
grp(idx(i)) = n & " - " & n + itm(1) - itm(0)
n = n + itm(1) - itm(0) + 1
Next i
Range("G2:G11").Value = Application.Transpose(grp)
End Sub


Typical results from my code are shown in column G. ( The code works on the data from column F )

_____ Workbook: Sample.xlsm ( Using Excel 2007 32 bit )
Row\Col
E
F
G
H
I

1for illustration
SN
Some expected resultNumber inside Group


2
1
1 - 244
923 - 1166
244


3
2
245 - 448
1 - 204

204


4
3
449 - 750
398 - 699
302


5
4
751 - 1003
1879 - 2131

253


6
5
1004 - 1266
1167 - 1429

263


7
6
1267 - 1489
700 - 922
1 - 223
223


8
7
1490 - 1698
1430 - 1638

209


9
8
1699 - 1938
1639 - 1878
224 - 463
240


10
9
1939 - 2126
2132 - 2319
188


11
10
2127 - 2319
205 - 397

193
Worksheet: Sheet1


here below a few more runs, showing just column G
_____ Workbook: Sample.xlsm ( Using Excel 2007 32 bit )
Row\Col
G

1



2
591 - 834


3
835 - 1038


4
1502 - 1803


5
2067 - 2319


6
1804 - 2066


7
1279 - 1501


8
382 - 590


9
1039 - 1278


10
194 - 381


11
1 - 193
Worksheet: Sheet1

_____ Workbook: Sample.xlsm ( Using Excel 2007 32 bit )


254 - 497
2076 - 2319
1470 - 1713
638 - 881


498 - 701
517 - 720
1923 - 2126
1 - 204


1174 - 1475
1774 - 2075
705 - 1006
2018 - 2319


1 - 253
264 - 516
264 - 516
1354 - 1606


911 - 1173
1 - 263
1 - 263
882 - 1144


1476 - 1698
1551 - 1773
1247 - 1469
1607 - 1829


702 - 910
1342 - 1550
1714 - 1922
1145 - 1353


1892 - 2131
721 - 960
1007 - 1246
205 - 444


2132 - 2319
1154 - 1341
517 - 704
1830 - 2017


1699 - 1891
961 - 1153
2127 - 2319
445 - 637
Worksheet: Sheet1

DocAElstein
12-31-2018, 12:43 AM
'

Sub Populatenumbersfromrangeofnumbers2() ' http://www.eileenslounge.com/viewtopic.php?f=30&t=31531&p=244015#p244015
Dim Ws1 As Worksheet: Set Ws1 = Worksheets("Sheet1")
Dim arrSN() As Variant: Let arrSN() = Ws1.Range("F2:F" & Ws1.Range("F" & Rows.Count & "").End(xlUp).Row & "").Value ' range of current SNs
Dim arrGrpsOut() As String: ReDim arrGrpsOut(1 To 1) ' 1 Dimensional Array for output values.
Dim cnt As Long, Cnt2 As Long, Rng2 As Long, Rng1 As Long, Rws As Long
For cnt = LBound(arrSN(), 1) To UBound(arrSN(), 1)
Dim SpltRng() As String: Let SpltRng() = Split(arrSN(cnt, 1), " - ", 2, vbBinaryCompare)
Dim arrRws() As Variant 'Array for 1 2 3 4 5 6 7 etc
Let arrRws() = Evaluate("=row(" & SpltRng(0) & ":" & SpltRng(1) & ")") ' This returns a one "column" 2 Dimensional array of all the numbers between the ranges
Let Rng1 = UBound(arrGrpsOut()) + 1 ' The start of a range must be just above the last one
Let Rng2 = Rng1 + SpltRng(1) - SpltRng(0) ' 'this gives the top of the current range in indicies of arrGrpsOut()
ReDim Preserve arrGrpsOut(1 To Rng2)
For Cnt2 = Rng1 To Rng2
Let arrGrpsOut(Cnt2) = arrRws(Cnt2 - Rng1 + 1, 1) ' Cnt2 is the indicie in arrGrpsOut(), for the indicie in arrRws() we need to start at 1, then 2 3 4 5
Next Cnt2
Next cnt

Dim arrOut() As String: ReDim arrOut(1 To UBound(arrGrpsOut()) - 1, 1 To 1) ' a 2 dimension, 1 column , to be easy to post the results of this array into a column
For cnt = 1 To UBound(arrGrpsOut()) - 1
Let arrOut(cnt, 1) = arrGrpsOut(cnt + 1)
Next cnt

Let Ws1.Range("K2").Resize(UBound(arrOut(), 1), 1) = arrOut()
End Sub
Sub Populatenumbersfromrangeofnumbers2_2() ' http://www.eileenslounge.com/viewtopic.php?f=30&t=31531&p=244015#p244015
Dim Ws1 As Worksheet: Set Ws1 = Worksheets("Sheet1")
Dim arrSN() As Variant: Let arrSN() = Ws1.Range("G2:G" & Ws1.Range("G" & Rows.Count & "").End(xlUp).Row & "").Value ' range of current SNs
Dim arrGrpsOut() As String: ReDim arrGrpsOut(1 To 1) ' 1 Dimensional Array for output values.
Dim cnt As Long, Cnt2 As Long, Rng2 As Long, Rng1 As Long, Rws As Long
For cnt = LBound(arrSN(), 1) To UBound(arrSN(), 1)
Dim SpltRng() As String: Let SpltRng() = Split(arrSN(cnt, 1), " - ", 2, vbBinaryCompare)
Dim arrRws() As Variant 'Array for 1 2 3 4 5 6 7 etc
Let arrRws() = Evaluate("=row(" & SpltRng(0) & ":" & SpltRng(1) & ")") ' This returns a one "column" 2 Dimensional array of all the numbers between the ranges
Let Rng1 = UBound(arrGrpsOut()) + 1 ' The start of a range must be just above the last one
Let Rng2 = Rng1 + SpltRng(1) - SpltRng(0) ' 'this gives the top of the current range in indicies of arrGrpsOut()
ReDim Preserve arrGrpsOut(1 To Rng2)
For Cnt2 = Rng1 To Rng2
Let arrGrpsOut(Cnt2) = arrRws(Cnt2 - Rng1 + 1, 1) ' Cnt2 is the indicie in arrGrpsOut(), for the indicie in arrRws() we need to start at 1, then 2 3 4 5
Next Cnt2
Next cnt

Dim arrOut() As String: ReDim arrOut(1 To UBound(arrGrpsOut()) - 1, 1 To 1) ' a 2 dimension, 1 column , to be easy to post the results of this array into a column
For cnt = 1 To UBound(arrGrpsOut()) - 1
Let arrOut(cnt, 1) = arrGrpsOut(cnt + 1)
Next cnt

Let Ws1.Range("L2").Resize(UBound(arrOut(), 1), 1) = arrOut()
End Sub


_____ Workbook: Sample.xlsm ( Using Excel 2007 32 bit )


SN
Some expected resultNumber inside Group


1 - 244
1600 - 1843
24411600


245 - 448
700 - 903

20421601


449 - 750
398 - 699
30231602


751 - 1003
1844 - 2096

25341603


1004 - 1266
1144 - 1406

26351604


1267 - 1489
2097 - 2319
1 - 223
22361605


1490 - 1698
189 - 397

20971606


1699 - 1938
904 - 1143
224 - 463
24081607


1939 - 2126
1 - 188
18891608


2127 - 2319
1407 - 1599

193101609




2319111610



121611






131612






141613






151614






161615






171616






181617






191618






201619






211620






221621



231622



241623



251624



261625



271626



281627



291628



301629



311630



321631



331632



341633
Worksheet: Sheet1

FinalKandLColumns.JPG : https://imgur.com/NF6f2vL
2124

DocAElstein
01-01-2019, 07:41 PM
Code for suppot of this Thread:
http://eileenslounge.com/viewtopic.php?f=30&t=31540


Sub SpltTests()
Call Splt(1, 244, 1377, 1620)
End Sub
Function Splt(ByVal N1a As Long, ByVal N1b As Long, ByVal N2a As Long, ByVal N2b As Long) As Variant ' Variant as I don't know yet what might be wanted as output
Rem 1 full columns of data - full data arrays
Dim Clm1() As Variant: Let Clm1() = Evaluate("=row(" & N1a & ":" & N1b & ")") ' This returns a one "column" 2 Dimensional array of all the numbers between N a and N b
Dim Clm2() As Variant: Let Clm2() = Evaluate("=row(" & N2a & ":" & N2b & ")")
Rem 2 get total number of arrays needed
Dim En As Long ' We want
Let En = Int(((N1b - N1a) + 1) / 40) + 1
Rem 3a Not so simple maths to get some grouped numbers for top left of output arrays
' I need rows 1,1,1,42,42,42,83, columns 1,4,7,1,4,7,1
Dim ltrEn As String: Let ltrEn = Cltr(En) ' column letter from column number - G in example data
Dim ltrEnPlus3 As String: Let ltrEnPlus3 = Cltr(En + 3)
Dim Rws() As Variant ' row co ordinates of outout arrays
Let Rws() = Evaluate("=Index((int((column(D:" & ltrEnPlus3 & ")-1)/3)),)") ' Evaluate("=Index((int((column(D:J)-1)/3)),)") 'returns {1, 1, 1, 2, 2, 2, 3}
Dim Clms() As Variant ' column co ordinates of output arrays
Let Clms() = Evaluate("=Index((mod(column(A:" & ltrEn & ")-1,3)+1),)") ' Evaluate("=Index((mod(column(A:G)-1,3)+1),)") 'Returns { 1, 2, 3, 1, 2, 3, 1 }
Dim Cnt ' Loop for all data sections ==================================================
For Cnt = 1 To En
Rem 3b Top left for each array
Dim rTL As Long, cTL As Long
Let rTL = ((Rws(Cnt) - 1) * 41) + 1 ' In the looping this will give 1,1,1,42,42,42,83
Let cTL = ((Clms(Cnt) - 1) * 3) + 1 ' In the looping this will give 1,4,7,1,4,7,1
Rem 4 Columns of data for each loop
Dim ClmOut1() As Variant, ClmOut2() As Variant '4a) use Index with arrays to get part of the sections from full data arrays
Let ClmOut1() = Application.Index(Clm1(), Evaluate("=column(" & Cltr(((Cnt - 1) * 40) + 1) & ":" & Cltr(Cnt * 40) & ")"), 0) ' column 1
Let ClmOut2() = Application.Index(Clm2(), Evaluate("=column(" & Cltr(((Cnt - 1) * 40) + 1) & ":" & Cltr(Cnt * 40) & ")"), 0) ' column 2
Dim ClmOut1_1(1 To 40, 1 To 1) As Variant, ClmOut2_1(1 To 40, 1 To 1) As Variant ' I need Variant so as to get empty back for last array in loop paste out
Dim Cnt2 As Long '4b) Loop to get convenient for output 2 dimensional 1 column arrays
For Cnt2 = 1 To 40
If IsError(ClmOut1(Cnt2)) Then Exit For ' To stop filling last array for large than top range value
Let ClmOut1_1(Cnt2, 1) = ClmOut1(Cnt2) ' column 1
Let ClmOut2_1(Cnt2, 1) = ClmOut2(Cnt2) ' column 2
Next Cnt2
Rem 5 Output of arrays to worksheet
'5a Title
Dim Tital(1 To 1, 1 To 2) As String: Let Tital(1, 1) = "S1": Let Tital(1, 2) = "S2"
'5b Columns of data
Dim WsRes As Worksheet: Set WsRes = Worksheets("Result")
WsRes.Cells.Item(rTL, cTL).Resize(1, 2).Value = Tital() ' Title
WsRes.Cells.Item(rTL + 1, cTL).Resize(40, 1).Value = ClmOut1_1() ' column 1
WsRes.Cells.Item(rTL + 1, cTL + 1).Resize(40, 1).Value = ClmOut2_1() 'column 2
Erase ClmOut1_1(), ClmOut2_1() ' without doing this out last array will not have any empties in it
Next Cnt ' ================================================== ===========================
End Function

' Column letter http://www.excelforum.com/development-testing-forum/1101544-thread-post-appendix-no-reply-needed-please-do-not-delete-thanks-4.html#post4213980
Function Cltr(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Do
Let Cltr = Chr(65 + (((lclm - 1) Mod 26))) & Cltr
Let lclm = (lclm - (1)) \ 26 'This gives the number of 26's ( if any ), but just the excact part, in the next number down , - so applying the rest formula to this new number will again leave a difference "left over" rest.
Loop While lclm > 0 'Only loop further if number was big enough to still have 0-25's in it
End Function
'Dim arr1_40() As Variant: Let arr1_40() = Evaluate("=column(A:AN)") ' {1, 2, 3 ....40}


_.__________________________

It will take numbers like 1, 244, 1377, 1620 and then give your wanted result (I think, like Hans said, your test data is a bit wrong – check your row 82 should be 83 I think )
The function is hard coded inside for 40 data rows, and 3 columns of Result data, but you could easily adapt that for different numbers
Rem 1 gives the entire 2 columns of results , similar to in some of your last Threads. Full data arrays are got here for the ranges, ( in your example 1 - 244 and 1377 – 1620 )

Rem 2 does some simple maths to get the number of final sections, ( 7 in your example )

Rem 3 does some not so simple maths to get
row and column, Top left indices,
rTL and cTL , of where the output should go. You want
1,1,1,42,42,42,83 and 1,4,7,1,4,7,1

Rem 4 Uses Index( arrIn() , {1,2,3,4 } , 0 ) type stuff that you know about for pulling out part of an array to get the data section columns of data

Rem 5 Pastes out to the worksheet

Alan



Typical Output as seen in the next 2 posts,

DocAElstein
01-01-2019, 07:49 PM
First 3 section output after running Sub SpltTests() from last post ( http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=10881#post10881 , https://tinyurl.com/yd95w5v2 )

_____ Workbook: Sample.xlsm ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H

1
S1
S2
S1
S2
S1
S2


2
1
1377
41
1417
81
1457


3
2
1378
42
1418
82
1458


4
3
1379
43
1419
83
1459


5
4
1380
44
1420
84
1460


6
5
1381
45
1421
85
1461


7
6
1382
46
1422
86
1462


8
7
1383
47
1423
87
1463


9
8
1384
48
1424
88
1464


10
9
1385
49
1425
89
1465


11
10
1386
50
1426
90
1466


12
11
1387
51
1427
91
1467


13
12
1388
52
1428
92
1468


14
13
1389
53
1429
93
1469


15
14
1390
54
1430
94
1470


16
15
1391
55
1431
95
1471


17
16
1392
56
1432
96
1472


18
17
1393
57
1433
97
1473


19
18
1394
58
1434
98
1474


20
19
1395
59
1435
99
1475


21
20
1396
60
1436
100
1476


22
21
1397
61
1437
101
1477


23
22
1398
62
1438
102
1478


24
23
1399
63
1439
103
1479


25
24
1400
64
1440
104
1480


26
25
1401
65
1441
105
1481


27
26
1402
66
1442
106
1482


28
27
1403
67
1443
107
1483


29
28
1404
68
1444
108
1484


30
29
1405
69
1445
109
1485


31
30
1406
70
1446
110
1486


32
31
1407
71
1447
111
1487


33
32
1408
72
1448
112
1488


34
33
1409
73
1449
113
1489


35
34
1410
74
1450
114
1490


36
35
1411
75
1451
115
1491


37
36
1412
76
1452
116
1492


38
37
1413
77
1453
117
1493


39
38
1414
78
1454
118
1494


40
39
1415
79
1455
119
1495


41
40
1416
80
1456
120
1496


42
S1
S2
S1
S2
S1
S2


43
121
1497
161
1537
201
1577
Worksheet: Result

DocAElstein
01-01-2019, 07:51 PM
4, 5, 6 and 7 data section output after running Sub SpltTests() from http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=10881#post10881
https://tinyurl.com/yd95w5v2

_____ Workbook: Sample.xlsm ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H

41
40
1416
80
1456
120
1496


42
S1
S2
S1
S2
S1
S2


43
121
1497
161
1537
201
1577


44
122
1498
162
1538
202
1578


45
123
1499
163
1539
203
1579


46
124
1500
164
1540
204
1580


47
125
1501
165
1541
205
1581


48
126
1502
166
1542
206
1582


49
127
1503
167
1543
207
1583


50
128
1504
168
1544
208
1584


51
129
1505
169
1545
209
1585


52
130
1506
170
1546
210
1586


53
131
1507
171
1547
211
1587


54
132
1508
172
1548
212
1588


55
133
1509
173
1549
213
1589


56
134
1510
174
1550
214
1590


57
135
1511
175
1551
215
1591


58
136
1512
176
1552
216
1592


59
137
1513
177
1553
217
1593


60
138
1514
178
1554
218
1594


61
139
1515
179
1555
219
1595


62
140
1516
180
1556
220
1596


63
141
1517
181
1557
221
1597


64
142
1518
182
1558
222
1598


65
143
1519
183
1559
223
1599


66
144
1520
184
1560
224
1600


67
145
1521
185
1561
225
1601


68
146
1522
186
1562
226
1602


69
147
1523
187
1563
227
1603


70
148
1524
188
1564
228
1604


71
149
1525
189
1565
229
1605


72
150
1526
190
1566
230
1606


73
151
1527
191
1567
231
1607


74
152
1528
192
1568
232
1608


75
153
1529
193
1569
233
1609


76
154
1530
194
1570
234
1610


77
155
1531
195
1571
235
1611


78
156
1532
196
1572
236
1612


79
157
1533
197
1573
237
1613


80
158
1534
198
1574
238
1614


81
159
1535
199
1575
239
1615


82
160
1536
200
1576
240
1616


83
S1
S2


84
241
1617


85
242
1618


86
243
1619


87
244
1620


88
Worksheet: Result

DocAElstein
01-09-2019, 09:11 PM
Main Routine in support of these Threads Part 1
http://www.excelfox.com/forum/showthread.php/2146-%E0%A4%AC%E0%A5%8D%E0%A4%B2%E0%A5%89%E0%A4%97-%E0%A4%95%E0%A5%8B%E0%A4%B6%E0%A4%BF%E0%A4%B6-%E0%A4%95%E0%A4%B0-%E0%A4%B0%E0%A4%B9%E0%A4%BE-%E0%A4%B9%E0%A5%88-%D8%A8%D9%84%D8%A7%DA%AF%D8%B2-%DA%A9%DB%8C-%DA%A9*Trying-Blogs?p=10893#post10893
http://www.eileenslounge.com/viewtopic.php?f=21&t=31572

The coding is split into 2 parts to fil it into a Forum Post. But this and the coding in the next post form a single routine. That forms the main routine. In addition, a routine Called by the Main routine is required, Public Sub GetElemsText( ) , which is posted in the over next post.


Option Explicit
Sub EP() ' http://www.excelforum.com/showthread.php?t=1148621&page=7&p=4452110&highlight=#post4452110
Rem 1)File Info
'Dim wsLkUp As Worksheet: Set wsLkUp = ThisWorkbook.Worksheets("Tabelle1"): wsLkUp.Activate
Dim strURL As String ' File with Page ' file:///G:/Excel0202015Jan2016/OffenFragensForums/eileenslounge/XP/Updates/report.html
Let strURL = ThisWorkbook.Path & "\Updates\" & "report.html" ' '"http://www.ernaehrung.de/lebensmittel/de/W233000/Fleischkaese.php" ' "http://www.ernaehrung.de/lebensmittel/de/W233000/PloppyPooFukYou"
' Application.Wait Now + TimeValue("00:00:02") '
Rem 2) '
'2a xmlHTTP stuff MSXML2.XMLHTTP.6.0 IXMLHTTPRequest Alan: "simple xml request here, so you could give URL a simple File of the HTML code" 'Dim Request As Object: Set Request = CreateObject("MSXML2.XMLHTTP") 'Late Inding https://msdn.microsoft.com/en-us/library/ms759148(v=vs.85).aspx
Dim request As MSXML2.XMLHTTP: Set request = New MSXML2.XMLHTTP 'Early Binding Requires --- TOOLS --- REFERENCES -- tick Microsoft XML, v6.0 http://www.mrexcel.com/forum/excel-questions/759592-help-createobject-msxml2-xmlhttp-macro.html
'Application.Cursor = xlWait'cursor disable..just to be on the safe side???
With request '(or With CreateObject("msxml2.xmlhttp"))'By virtue of GET this is a simplified "xml" request
.Open bstrmethod:="GET", bstrURL:=strURL, varasync:=True ' ("GET", strURL, True) 'just preparing the request type, how and what type. The second argument determines type. This may then require further info in next lines Only diferrence to pike's and Kyle's opening and sending stuff is argument:- Leith: "The True/False argument of the HTTP Request is the Asynchronous mode flag. If set False then control is immediately returns to VBA after Send is executed. If set True then control is returned to VBA after the server has sent back a response. I prefer to use asynchronous mode and test if my timeout period has expired to prevent the code from hanging due to an unresponsive server. In the example I provided I used synchronous mode to reduce the amount the code and keep it easier to understand."
'No extra info here for type GET ' ' '.setRequestHeader "DNT", "1"
'.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" ' Content-Type is the property name, x-www-form-urlencoded is the value (content type in the html is "text/html" not "x-www-form-urlencoded" - that is something diifferent) You can have different request header properties and pass different values. This isn't unusual, just not required in this case When you POST data to a server, you need to tell it what format you are sending it in. So the Type of Content sent in the body of the request (the send bit) is application/x-www-form-urlencoded
.setRequestHeader bstrheader:="Ploppy", bstrvalue:="Poo"
.send ' varBody:= ' No extra info for type GET. .send actually makes the request
While .readyState <> 4: DoEvents: Wend ' Allow other processes to run while the web page loads. Think this is part of the True option
Dim PageSrc As String: Let PageSrc = .responseText ' Save the HTML code in the (Global) variable. ': Range("P1").Value = PageSrc 'For me for a print out copy to text file etc. The responseText property returns the information requested by the Open method as a text string
End With
Set request = Nothing ' This section is finished. We no longer need the Library. Optionally can therefore Set request = Nothing, a step most appropriate if required for some reason. Previous arguments of good practice to prevent memory leaks and data corruption appear outdated in favour of only using when a good reason is apparent to avoid masking when it is a good idea.
'_..EP2ab Explicit Pedantry. We intend using PagrSrc through a method to produce a model Object Orientated stylio for later use through use of its Methods and Properties. This model is frequently referred to as a Document Orientated Model, DOM. Some steps in this creation of the "DOM" can frequently be confused with the processes in '2a which are in fact now finished. Part of the .Send , "finishes all processes. We move on to '2b. Only PagrSrc is required to be "taken over" as it were
'2b DOM stuff' Make OOP type model of HTML code, using Microsoft HTML Office Library
'Dim HTMLdoc As HTMLDocument: Set HTMLdoc = New HTMLDocument 'Early binding - will not work with .Write:- Leith "This is a case where late binding has to be used. The htmlfile is an ActiveX object that is a wrapper function for the IHTMLDocument2 interface in MSXML2. This gets into a lot of low level system operation......." https://www.mrexcel.com/forum/excel-questions/367030-copy-table-website-into-excel-vba-2.html#post4031122 https://www.excelforum.com/excel-programming-vba-macros/1214789-late-binding-2.html#post4820307 'Early binding TOOLS >>> REFERENCES >>Microsoft HTML Object Library
Dim HTMLdoc As Object: Set HTMLdoc = CreateObject("htmlfile") 'Late Binding, ' Create an empty HTML Document.
HTMLdoc.Open 'EP2b(i) This clears the values in the HTMLdoc. Complete Explicit Pedantry. in usage outside VBA, Methods for an instance will often be required which require a clearing of an instance before "using". Approximately in VBA this can be considered putting the DOM back to as if it were at the point just before it is given "loaded" with the PageSrc String. Effectively in VBA doing a pair of Set = Nothing , with either a Dim and Create Dom or Set = New type code line It serves no purpose usually in VBA. Effectively we reset a situation back to as it is. It can however be used through .Open
HTMLdoc.Write PageSrc 'EP2b(ii). Convert the HTML code into an HTML Document Object Model, DOM 'give it somehow the info it needs to work further? ---- Fills the DOM HTML .. Wiki Dom http://www.excelforum.com/showthread.php?t=1148621&page=3#post4441761
'HTMLdoc.body.innerHTML = PageSrc ' Most people do that, but The Write method of an HTML file is designed to convert the page source text into an HTML DOM document. Both methods achieve the same results. The more common way Body of the Page Source code when converting it to an HTML DOM document oustside of VBA. Withiin VBA it just works harder to achieve the same. This excludes the Meta data, Java scripts, and Class information from being converted. Generally speaking, this information is not used when retrieving only text data from a web page.
HTMLdoc.Close 'EP2b(iii) _ 2 b or not in 2b , that was the ?? http://www.excelforum.com/showthread.php?t=1148621&page=6.. Briefly When used outside VBA, some processes started by .Open() can or should be finished after the corresponding outside VBA .write(). This is done using .Close(). Once again this can be used in VBA through .Close. It has no conceivable merit or known as yet reason to use it in VBA. Pike thinks it It closes the document you have just written. As such he describes it as optional. He would also not have the HTMLdoc.Open. Kyle thinks nothing is open. Leith uses it but has made no comment to Date. This may be just his style, like my EP's just not including the HTMLdoc.Open 'EP2b(i)
Rem 3
Rem 3a) Directly

DocAElstein
01-09-2019, 09:11 PM
UDF that can change values in cells other than the cell in which the UDF is used
This Tips Thread was inspired by this one posted by Rick Rothstein (https://excelfox.com/forum/showthread.php/1519-Breaking-the-rules-for-UDF-s-(User-Defined-Functions))
I have referred to that posting from Rick quite a few times when showing people how to use a UDF to do things with a UDF in cells other than that in which the UDF is, and mostly pretty impressed they have been too. ( Those that weren’t impressed were those that did not believe it and never tried…. )

I finally got around to trying to get my head around this, and here is my take on it. If you are only interested in seeing the working examples, then jump to post 3 (https://excelfox.com/forum/showthread.php/2707-UDF-that-can-change-values-in-cells-other-than-the-cell-in-which-the-UDF-is-used?p=15263&viewfull=1#post15263)

If you are familiar with Ricks ways of doing this, then basically I am using his solutions but just not using the hyperlink. There’s not much more to it then that. I came there from a long winded way which I am discussing in the next post, but the key to it working is based on, or using, the way Rick used the Evaluate within the coding for the UDF that is in the worksheet

_______ Evaluate__ "SomeOtherProcedureToDoAnythingAnywhere(ArgY, __)"


Here again below, the solution a bit more fully: Below is the coding as you would write it in a normal code module , assuming that the Function MainUDF( ) is the UDF which you would use in the usual formula type way in a worksheet cell like __ = MainUDF( )
http://i.imgur.com/58IFQoQ.jpg

___Function MainUDF(__) ' UDF to be used in a worksheet cell like__ = MainUDF(ArgX)
____ ' any coding to do anything not related to changing things in the worksheet in which the UDF is used
____ '
_______ Evaluate__ "SomeOtherProcedureToDoAnythingAnywhere(ArgY, __)"
____ '
____ ' any coding to do anything not related to changing things in the worksheet in which the UDF is used
____ '
___End Function





Simplest Working Example:
The simplest example is something like the following:
Copy both procedures to a normal code module , …_

' Paste both procedures in a normal code module, then type =ChangeNextCell() in any cell followed by Enter
Function ChangeNextCell()
' Call NextCell ' This wont work. We will be on the same dependancy in the called procedure and cell dependancies are already calculated so attempts to access cells will be screwed up
Evaluate "NextCell()" ' The dependance tree is recalculated for the procedure NextCell() which is excecuted from a copy of the procedure not dependant on the spreadsheet update cycle in progress for the excecution of the function ChangeNextCell()
End Function
Sub NextCell()
ActiveCell.Offset(0, 1).Value = "Next cell." ' Excel has a memory of the last Active Cell and does not rely on dependance to the spreadsheet for this macro to run
End Sub
_... then type in any cell the function _ =ChangeNextCell() _ then _ Enter

ChangeNextCell.JPG : http://i.imgur.com/nqHHEfb.jpg https://imgur.com/nqHHEfb
https://i.imgur.com/nqHHEfb.jpg

ChangeNext Cell.JPG : http://i.imgur.com/iAQFUrj.jpg https://imgur.com/iAQFUrj
https://i.imgur.com/iAQFUrj.jpg

Change Next Cell.JPG : http://i.imgur.com/V7Lowxp.jpg https://imgur.com/V7Lowxp
https://i.imgur.com/V7Lowxp.jpg



In the next post some attempt to examine what’s going on. It is not complete; I may need to come back again on this one

DocAElstein
01-09-2019, 09:27 PM
Part 2 of Main code.
This coding in this post should be copied diretly under the coding from the last post. Together they form a single routine, the Main routine

(The routine, Public Sub GetElemsText( ) , which is posted in the next post is also required for the Main routine to work )


Rem 3a) Directly
'
'
' Simple text file print out using just result of PageSrc from '2a
Debug.Print PageSrc ' unfortunately you will unlikely be able to view the whole String as it appears too big. Also pasting to a cell will not make it all visible. However if after pasting the .value from the cell is put in a string and that used in place of Pagesrc in the creation of the DOM it does work, so indicating that the data is there, but just not possible for us to "see".
Dim strTextFile As String: Let strTextFile = ThisWorkbook.Path & "\Updates\strTextFile.txt"
Dim HghWyNo2 As Long: Let HghWyNo2 = FreeFile(RangeNumber:=1)
Open strTextFile For Binary As #HghWyNo2
Put #HghWyNo2, 1, PageSrc ' Use Put to write the whole array at once http://www.vb-helper.com/howto_read_write_binary_file.html https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/put-statement
Close HghWyNo2
'
'
'
'Application.Cursor = xlDefault' Restore the cursor to normal.
Rem 3b) Large Object from main made OOP type model object, (HTMLdoc) ( Rem 3b)(i) ) ' Dim Head As Object
'Dim Head As IHTMLElementCollection 'requires Early Binding. getElementsBy___ returns a NodeList which is an interface to the DispHTMLElementCollection which is an internal class that you're not supposed to see/use. It does implement the IHTMLElementCollection though so you can use that.
Dim Head As Object ' Unusually this Large main Object is Dim ed as an Object, ..as you find you cannot Dim it as what its TypeName( ) returns ( or as displayed in the Watch Window ), “DispHTMLElementCollection“ .
Set Head = HTMLdoc.getElementsByTagName("Table") 'This Object is a massive thing again with loads in, but this time it would appear to be the things "tagged" with < table > < /table > which look like the headings of each table I am interested in
Rem 4)(Rem 3b)(ii)) Often we would loop here for each "Table" but in our example we only have one
'Dim oTable As THMLTable ' If we had Early binding, then this would work, because omehow Head has been recognised as a table oTable as HTMLTable.JPG : https://imgur.com/R309JjC , and for ..._
Dim oTable As Object ' _... this table we have typically present in the object ' HTML TableRow count , "column" Count for final Table will need to be calculated, "HTML Cell" count in Entire Table
Dim C As Long, r As Long 'Indicies for getting appropriate Row and HTMLTableCell
'Dim n As Long ' Not needed if only one table so only "1 Loop"
'4b)=== main working would be Outer loop for each Table in many similar routines==============Building Array from HTML Table
'For n = 0 To Head.Length - 1 ' We only have one table so don't need to loop. The word Length in HTML things is often similar to what Count is in many VBA objects
Set oTable = Head(0) ' Somehow Head has been recognised as a table oTable as HTMLTable.JPG : https://imgur.com/R309JjC
'4b(i) Fill variable for dimensions variable for each, one on our case, Main loop
Dim rowCnt As Long: Let rowCnt = oTable.Rows.Length ' "length" / number of rows in this table
Dim colCt As Long: Let colCt = oTable.Cells.Length 'In this object the cells "length" would appear to be the number / count of cells in the entire table
Dim colCnt As Long: Let colCnt = Application.WorksheetFunction.RoundUp((colCt / oTable.Rows.Length), 0) ' 'This rounds up to the nearest avarage row width, that is to say column number in a row ' I thought this did ? colCt \ oTable.Rows.Length
Dim Data() As String 'Array with string element used for output table. Fixed (static) String type for Text.
ReDim Data(0 To rowCnt - 1, 0 To colCnt - 1) 'Output Array, reDimed to table being looked at. ( Hopefully always same column number, might want to hard Code to rowCnt, 11 columns . Because I am using "base" of indicie to start at 0 then I go from 0 to one less than the Count(Length)
'4b(ii) Looping through rows to build output array-----------|
'---Inner loop does at each row, ....
For r = 0 To rowCnt - 1 'Going along the HTML Table rows exactly as pike ' https://www.mrexcel.com/forum/excel-questions/367030-copy-table-website-into-excel-vba.html#post4026613
'--- .... 'go through each Cell( "column" ) in that row.
For C = 0 To colCnt - 1 'Going along the HTML Table Cells (columns) exactly the same as pike
'4b(ii)a Build Output Array
Call GetElemsText(oTable.Rows(r).Cells(C), Data(r, C)) 'Data(r, c) = oTable.Rows(r).Cells(c).innerText ' pike, kyle type alternative to calling sub
'4b(ii)b "post processing last column of unified units. ' Probably bad place to put this, other than Speed.. checking / changing units
' If C = .....
'
' Else
' End If
Next C
'--- .... 'go to next "Cell" in that table row (next Column we "see" in the table row)
Next r
'--- 'Go to next row in this table----------------------------|
'4b(ii)c Output from Array
Let Range("A1").Resize(UBound(Data(), 1) + 1, UBound(Data(), 2) + 1).Value = Data()
Columns("A:Z").AutoFit
'Next n 'go back with a new item, n in large collection Object(item) to get next object within and start checking that one out.
'Go to the next table====
Set HTMLdoc = Nothing ' If done then when we no longer need it
End Sub '

DocAElstein
01-09-2019, 09:27 PM
___Function MainUDF(__) ' UDF to be used in a worksheet cell like__ = MainUDF(ArgX)
____ ' any conventional UDF coding
____ '
_______ Evaluate__ "SomeOtherProcedureToDoAnythingAnywhere(ArgY, __)"
____ '
____ ' any conventional UDF coding
____ '
___End Function

___Sub SomeOtherProcedureToDoAnythingAnywhere (__) ' ____ ' Any conventional procedure
____ ' Any conventional procedure coding
____ ' coding to change other cell values
____ '
____ ' Any conventional procedure coding
___End Sub






What’s going on? Here is my take on it, - how I got the slightly modified version of Rick’s discovery
Back to the start of Rick’s Post (https://excelfox.com/forum/showthread.php/1519-Breaking-the-rules-for-UDF-s-(User-Defined-Functions)) : Rick reported a report, which was a report of the discovery that hovering over a hyperlink in a cell ( where the first argument of the hyperlink function was a Function ) caused the firing of the Function
Like this: Put this in a normal module

Function SayHello() ' ' In any cell type something of this form ( You will need to change the path to suit where you have yopur workbook ) =HYPERLINK('F:\Excel0202015Jan2016\ExcelFox\BlogsB ugs\BugsNovelShortTips\UDFinCellChangeOtherCells\U DF to modify other cells.xls'!Module1.SayHello(),"Hover over this cell to say Hello")
' Stop ' This Stop will only work if you navigate to the cell using arrow keys, and then hit Enter
MsgBox prompt:="Hello"
End Function

Now type _ =HYPERLINK(SayHello()) _ in a cell, and then (after hitting Enter) hover over the cell with the mouse
http://i.imgur.com/1zydn98.jpg
http://i.imgur.com/5hlZEbU.jpg
That message box should pop up


Two things struck me as strange about that
_ (i) That its happening, that is to say that hovering over the cell causes the firing of the function
_ (ii) The hyperlink function is accepting a procedure name rather than the string reference to where the hyperlink "goes"

The second, _ (ii) , exposed a few memory locations in my brain releasing some thoughts and previous observations of mine…
I have frequently seen that “exposing an interface”, ( “exposing an interface” : a technical term I have learnt is often applied to physically writing, or using, a full string reference to some object or function ), makes it do the main thing it is designed to "do". “Exposing an interface" in Visual Basic triggering functions allowing us to write some beautiful flowing single line codes. I think this is somehow fundamental to how excel works. There is something very fundamental to the workings of Excel whereby a full reference to a procedure or function will somehow be like "Calling" it into action. I get the feeling that the most work and fundamental writing of Excel was done at the beginning, and apparent advancements like the move from the original Excel 4 macros to VBA is somewhat of a cover up, or wrap up. People a lot smarter than me in computing tell me that Excel VBA is not really Object Oriented Programming Visual Basic, but rather an attempt after Excel version 4 to make it look and work as if it was.
The original Excel 4 macros worked by listing the commands. We can still do that, listing them in a Macro 4 worksheet ( For example from a new excel version worksheet hit Ctrl+F11 to see what happens ! )
We also have the availability of them Excel 4 macro commands via fiddling the using of the named range dialogue box such as to put the macro 4 command in place of where the “applies to” range would be. Then when we reference such a named range from a worksheet, the Excel 4 macro is fired.
Its my belief that functions and procedures, ( which could loosely all be called commands , where the actual command is the function or procedure name ), get “put somewhere” and can be got at in different ways…. This leads me on to the next couple of observations

Some of the other observations I made
_a) Fully referencing.
This was less of a surprise to me and is a direct consequence of my last few ramblings.
I can replace the simple procedure reference to a full macro Run syntax like
=HYPERLINK('F:\AFolderOfMine\AnotherFolderOfMine\T heFolderWithTheFileInIt\UDF to modify other cells.xls'!Module1.SayHello())
( Don’t be surprised if you try that, and Excel reduces it to something of the form
=HYPERLINK('UDF to modify other cells.xls'!Module1.SayHello())
- Excel has a general habit of reducing the full reference to a workbook when that reference is used in the opened workbook of that which the reference is used in )
( You can check the tricky syntax of such procedure run calls, including the argument versions here : https://stackoverflow.com/questions/31439866/multiple-variable-arguments-to-application-ontime/59812342#59812342 )
_b) Strange non Stoping : Dependency tree and decoupling from the worksheet of a run macro.
You will find that you can fire our simple macro both by the passing over the cell with the mouse, as already discussed, but in addition by using the arrow keys to navigate to the cell, then clicking in the formula bar and hitting Enter. That in itself is no surprise. This latter way, using the Enter key triggers the worksheet re calculation, according to various processes governed by things that come under the Heading of Dependency trees.
What might come as a surprise is the following…. Modify the simple macro to include the Stop and/ or click in the margin to make some brown circle stop points
http://i.imgur.com/xc1QiW4.jpg
The latter way, using the Enter , will get you Stoped in the VB Editor. That is still no surprise.
But hover over the cell with the mouse, .. and you won’t get Stopped!
That was less of a surprise for me, but did help me think that the consideration of the Hyperlink function directly is slightly off course, at least to my way of thinking ….._

Dependency tree and decoupling from the worksheet of a run macro.
_....One of my little theories, already touched on briefly, is that procedures generally are held somewhere and how and exactly , ( to the split second ), when they are run is not always the same. ( I used these thoughts before to discover that another apparently impossible thing could be done, - Passing arguments ByRef using Application Run- https://web.archive.org/web/20190816162718/http://excelmatters.com/2017/04/07/passing-arguments-byref-using-run/#comment-205853 )
We mentioned "exposing an interface" triggers functions allowing us to write some beautiful flowing single line codes. To prevent a possible chaos caused by this, Excel has a dependency tree which informs Excel about which cells depend on which others, or equivalently, which cells are precedents for which others. From this tree, Excel constructs a calculation chain. ( Array formulas use this extensively, or rather, the possibility to have them sets the simplest basic structure, and the so called CSE Entry is a way to exclude cells from processes that require a more detailed dependency tree. )..
By examining dependency trees we can find ways to force a reconstruction of the calculation chain, “after the event” , as it were. There are many ways to do this, probably most of them requiring a convoluted workaround like passing memory locations and copying memory blocks.
Simple ways can often be found. For Application Run , Late Binding is a simple workaround.
Although the Hyperlink considerations have slightly distracted me, Rick’s post (https://excelfox.com/forum/showthread.php/1519-Breaking-the-rules-for-UDF-s-(User-Defined-Functions)) has shown me something and partially reminded me that Evaluate has more than the ability to process the text string equivalent of a worksheet formula.
It’s rare that Microsoft documentation is on its own helpful, but occasionally there documentation may still contain some snippets, or clues. Form parts of Microsoft documentation on the Evaluate… .."Processes … using the naming convention of Microsoft Excel . " …….
Ricks interest in Evaluate infected me with it a bit, but I only ever used it to return something.
Rick’s post (https://excelfox.com/forum/showthread.php/1519-Breaking-the-rules-for-UDF-s-(User-Defined-Functions)) introduced me to the way of using it like
______ Evaluate__ "Process….. using the naming convention of Microsoft Excel "
Its another one of my little theories that using Evaluate will force a reconstruction of the calculation chain removing dependencies on a worksheet, or at least leading them to be in a form of later recalculation. I think this is what we are looking for:
The snag often regarded as leading to the claim that a UDF can only change values in the cell that it is in, is a direct consequence of the way an Excel spreadsheet is updated in the simplest case. In Layman’s terms, “you can’t lift up a rake when your standing on it….”: To aid efficiency a simple UDF is in the simplest calculation change: things are done in something which can approximately regarded as a simple sequential way , ( we may experience it as along columns then down rows ). That simple dependency chain screws us up in trying to change other cell values.
We have already discussed that evaluating a name is a fundamental part at low level of triggering a run. A good thing to try to "remove an awkward worksheet dependence" would be maybe …
__ Evaluate "YouNameIt"

I tried…
Bingo – It works!

Practical example in the next post.

( after those last "Hello" experiments, it might be best to remove or ' comment out that function, as it might interfere with some of the next experiments
Indeed, in general it is a good idea to remove or ' comment out any used test procedures before moving on to other procedures , as occasionally when debugging and testing functions, UDFs can sometimes be fired off erratically or by accident )

Conclusions. What’s going on
I am not sure yet. I only have constant and stable success with changing values. Values are a more fundamental things and are accessible also from closed workbooks using similar reference strings to some discussed here, but the significance of this I am not yet fully clear on. There are parallels to some of my findings with Running of macros and Excel 4 macro commands.
I think it needs a lot of detailed research, including cross referencing in different Excel versions to do this topic full justice.
I will come back to this Thread probably and either edit or post more replies as time goes on.

Ref
https://www.myonlinetraininghub.com/excel-4-macro-functions
https://docs.microsoft.com/en-us/office/client-developer/excel/excel-recalculation
https://www.excelforum.com/excel-programming-vba-macros/1303563-function-sub-exiting-early-except-when-called-from-developer-tab.html#post5265903
https://www.excelforum.com/excel-charting-and-pivots/1131728-trigger-a-macro-or-worksheet-event-with-a-udf.html#post4343285
https://excelfox.com/forum/showthread.php/1519-Breaking-the-rules-for-UDF-s-(User-Defined-Functions)




https://superuser.com/questions/602216/how-do-you-write-an-excel-formula-that-will-paste-a-specific-value-in-a-differen
https://stackoverflow.com/questions/41624463/excel-calculation-in-one-cell-result-in-another

DocAElstein
01-09-2019, 09:29 PM
This is required for the single Main routine which is posted in two parts in the last two posts


[Code]'2 Alan http://www.excelforum.com/showthread.php?t=1148621&page=3#post4441761
'5 Leith Ross http://www.mrexcel.com/forum/excel-questions/367030-copy-table-website-into-excel-visual-basic-applications-2.html#post4031122
'10 '....' "This is a recursive procedure to extract text from between an element's start tag and end tag and everything in between. Usually the Calling program will have passed a HTML code ( either from, for example, a .HTML File, a .Tex File, a .txt file, or from a returned such file after a request to a web page) into a Document Object Model. ( DOM ). This somehow organises things in a tree type structure , approximately as like you might see if you carefully indented the HTML code yourself, such that tag pairs were clear to see within tag pairs, each level down as it were. ( a "next level down" is often referred to as a "Child" ). The exact structure is less obvious, but in any case the DOM will have some ordered structure and every constitute part of the code is referred to as an Element. In a simple case most Elements have a start and stop pointed bracket. They are all nodes. Text is usually squeezed in between somewhere within a paired tag set, but is also referred to as a node.
'12 'I think a node is a point, usually a junction point in the tree type structure. Usually before the procedure is run a first time, an Element will have been obtained from the DOM and this is to be passed in the signature line of the procedure, as an Object. VBA then makes a Copy of the procedure and runs that with the given Element.
'15 'The macro will examine this Element Object brought in for a Text Node: If the element .NodeType is not 3 (a text node) then there are possibly child nodes ( Nodes "next down" in a Tree type listing ) that need to examined. The procedure then "Calls itself". In other words the first Copy stops at the Call Point. At the Call point another Copy of the procedure is made and runs in a loop for each child node.
'20 'The next Copy of the macro will again examine the element for a Text Node. If found (If element node type is 3), the text is concatenated with the ElemText String. If this is the ElemText string is empty then ElemText is set to this value. If not then this value is concatenated with any previous text and separated by a tilde character. This character can be used later to parse the text string into the individual strings from each element. The macro will exit the Sub at this point. When this happens, this copy of the macro is "removed from the call stack", in other words it Ends, and the last Copy continues from the Call point at which it was stopped.
Public Sub GetElemsText(ByRef Elem As Object, ByRef ElemText As String) 'It takes an Object, (variable Elem), a HTML Element, or a ( child ) node thereof. (Wiki says "An HTML element is an individual component of an HTML document or web page, once this has been parsed into the Document Object Model. (DOM). HTML is composed of a tree of HTML Elements and other nodes, such as text nodes." May be close to but not excactly what you se by carefully indenting down "Child" levels
'25 Dim strobjElem As String: Let strobjElem = TypeName(Elem)' http://www.excelforum.com/excel-programming-vba-macros/1149427-vba-determine-object-type-from-html-dom-object-put-type-in-string-variable-as-shown-in.html
65 Rem 1) Do we have an Element
70 If Elem Is Nothing Then GoTo LEndSub [color=darkgreen]'If the Object Elem is empty, or rather we are not given one, Then we End

DocAElstein
01-09-2019, 09:29 PM
Post 3 of 3 ... 4 ... 5 etc

Here are some simple working examples. I will probably edit and add to them as time goes on. So far I have tried all these macros and get similar results in Excel 2002 2003 2007 2010 2013 in operating systems of XP Vista Windows 7 Windows 10
I will come back to this Thread probably and either edit or post more replies as time goes on.
Any feedback in particular for results in newer Excel versions would be very welcome

(Note: In general it is a good idea to remove or ' comment out any test procedures before moving on to test other procedures, as occasionally when debugging and testing functions, UDFs can sometimes be fired off erratically or by accident )

If you are familiar with Ricks ways of doing this, then basically I am using his solutions but just not using the hyperlink. There’s not much more to it then that. I came there from a long winded way, explained in post #1, but the key to it working is based on, or using, the way Rick used the Evaluate within the coding for the UDF that is in the worksheet

___________ Evaluate "SomeOtherProcedureToDoAnythingAnywhere(Arg _ , _ )"

DocAElstein
01-09-2019, 09:54 PM
Post to support this Thread:
http://www.excelfox.com/forum/showthread.php/2293-Move-values-in-rows-at-the-end-of-the-preceding-row?p=10888#post10888
_1) This part of Rick’s solution
Evaluate(Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow))

I have seen something similar to this before, but it is lost to mankind hidden down in the comment section of a Blog site, Allen Wyatt’s I think…… so its nice that something like this has seen the light of day here…
If I am not mistaken, this non-looping macro should also work...



Sub ThisShouldWork()
Dim LastRow As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:A" & LastRow) = Evaluate(Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow))
Range("A1:A" & LastRow).SpecialCells(xlBlanks).EntireRow.Delete
End Sub



To help simplify the explanation, lets take it that we know our range , ( http://www.excelfox.com/forum/showthread.php/2293-Move-values-in-rows-at-the-end-of-the-preceding-row#post10870 ) so we have LastRow = 40
Two arbitrarily chosen characters, @ and # , are being used to enter into the main formula the LastRow or LastRow +1
Pseudo like we are doing this sort of thing
Replace( “A#” , “#” , “40” ) in order to end up with like “A40”
By inspection of the main formula, and with a bit of eye straining you can probably see where you replace those @ and # with 40 and 41
Just to be sure , running this will get you a nice copy able version of the main formula in the immediate window , ( after running you Hit Ctrl+g from the VB Editor to get the immediate window up):

Sub ThisShouldWork()
Dim LastRow As Long, strEval As String
Let LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Let strEval = Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow)
'Range("B1:B" & LastRow).FormulaArray = "=" & strEval
Debug.Print strEval 'IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A41," ",""),",","")),IF(LEFT(A1:A40,4)="2018",TRIM(A1:A40&" "&A2:A41),""),IF(LEFT(A1:A40,4)="2018",A1:A40,""))

That did work.JPG : https://imgur.com/01sQ91X

_._______________________-
Before moving on a useful note: It is always useful when developing these formulas to view the string in the Immediate window: That can help with tricky syntaxes : The formula seen on the Immediate window must look like a formula in the same syntax as you would manually type it into a cell. So you can see immediately if you get something wrong , such as an error in the finally seen quotes.
_.__________________________
So we have our final formula:
IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A41," ",""),",","")),IF(LEFT(A1:A40,4)="2018",TRIM(A1:A40&" "&A2:A41),""),IF(LEFT(A1:A40,4)="2018",A1:A40,""))
The way these formulas appear to work within the Evaluate(“ “) appears to be tapping into an along the columns , down a row, then along the columns… type updating raster to update a worksheet. The available output then seems to be that which encompasses the deepest and widest ranges. It is a ,little bit more complicated than that ( http://www.excelfox.com/forum/showthread.php/2145-Excel-VBA-Interception-and-Implicit-Intersection-and-VLookUp ) , but for our formula we have nice regular equally sized ranges so we are expecting an output of 1 “wide” and 40 “deep”. So for analysis purposes, we can reduce the formula to 40 similar ones.

Lets take the example of the formula for the 13th “down” output ..
IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13&" "&A14),""),IF(LEFT(A13,4)="2018",A13,""))
Clearly we need to look at this data to see what that formula will do, because this data is used in that formula
_____ Workbook: NormanOrrinRickFilter.xlsm ( Using Excel 2007 32 bit )
Row\Col
A

132018, 1, 90709, 10020009, P4, Blabla og Blalala (NY), CHE, Blabla,Bla-ah,


1410006098, 15392.64
Worksheet: Rick

We have some nested IFs , and I find it is always a good idea to break those down so that we can start doing them as Excel or VBA would do them, that is to say from the middle working outwards. I tend to do this in a text editor with a horizontal scroll bar, or in the VB Editor window
Formula in VB Editor as comment.JPG : https://imgur.com/3cjyqSR

So this is what we have, broken down into the constituent IF sections.
( It may be better to copy this and view in your VB Editor in a wide window. I am working from the bottom , upwards )

' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),"") , IF(LEFT(A13,4)="2018",A13,"") )
' IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),""),IF(LEFT(A13,4)="2018",A13,""))

Examining the first line , I can evaluate the two innermost IFs and reduce the formula to

' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), TRIM(A13" "&A14) , A13 )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )


I will now evaluate some of those SUBSTITUTEs
( Excel Substitute, seems to work similarly to VBA Replace )

' IF( ISNUMBER(0+1000609815392.64), TRIM(A13" "&A14) , A13 )
' IF( ISNUMBER(0+SUBSTITUTE(10006098,15392.64),",","")), TRIM(A13" "&A14) , A13 )

( I am guessing that 0+ will ensure that a number will not be mistaken as a text )

For the case of the 13th “down” formula the final steps in the evaluation go as follows

' 2018, 1, 90709, 10020009, P4, Blabla og Blalala (NY), CHE, Blabla,Bla-ah, 10006098, 15392.64
' TRIM(A13" "&A14)

' IF( True , TRIM(A13" "&A14) , A13 )

Here are all the steps together again

' 2018, 1, 90709, 10020009, P4, Blabla og Blalala (NY), CHE, Blabla,Bla-ah, 10006098, 15392.64
' TRIM(A13" "&A14)

' IF( True , TRIM(A13" "&A14) , A13 )


' IF( ISNUMBER(0+1000609815392.64), TRIM(A13" "&A14) , A13 )
' IF( ISNUMBER(0+SUBSTITUTE(10006098,15392.64),",","")), TRIM(A13" "&A14) , A13 )

' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), TRIM(A13" "&A14) , A13 )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )


' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),"") , IF(LEFT(A13,4)="2018",A13,"") )
' IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),""),IF(LEFT(A13,4)="2018",A13,""))


The final result will appear in the 13th down position of the 40 “deep” array final results for the entire formula evaluation.
If you can view that last summary on a wide window, it should be able to see how the differing results for the other 39 results are achieved from the formula
Just to make clear once again what seems to go on in these sort of Evaluate formulas, in the next post is a table showing the actual Evaluateions done by VBA

_._____

_2 The final part of Rick’s solution is
Range("A1:A" & LastRow).SpecialCells(xlBlanks).EntireRow.Delete
This uses the VBA SpecialCells Method to get at the cells with nothing in them. Those are then deleted
Explanation:
VBA SpecialCells Method ( https://www.mrexcel.com/forum/excel-questions/21342-xlcelltypesameformatconditions.html , https://docs.microsoft.com/en-us/office/vba/api/excel.range.specialcells ) returns you a range object ( that range object must not be contiguous ( connected ) cells ) consisting of those cells meeting a specific characteristic. We can choose from a number of characteristics. Here we choose xlBlanks , which refers to the characteristic of the cell being empty. So, if we applied that .SpecialCells(xlBlanks) to this range:.._
Row\Col
B

9


10


112018, 1, 90515, 10024515, G9, SBlabla (HQ), CHE, BLABLA, blabla, 10012098, 12003.5


122018, 1, 90629, 10022334, P3, BLABLA blabla (blablabla), CHE, BLABLA,blabla, 10033609, 13941.72


132018, 1, 90709, 10020009, P4, Blabla og Blalala (NY), CHE, Blabla,Bla-ah, 10006098, 15392.64


14


152018, 1, 90765, 10012123, P4, Ch of Blabla(Blabla of Blabla), CHE, BLA-BLA,Bla Blabla, 10005678, 16231.7

_ … then the returned range from that would be Range(“B9:B10,B14”).
If we then apply .Delete to that range then those cells are removed. If you remove a cell via .Delete then initially there is a real hole, like a “black hole” that can’t really exist in a spreadsheet. So Excel might explode or implode, or you would be sucked into that hole , never to return!!! To prevent that happening, Excel shifts all cells to close that hole, ( and adds a new virgin cell at the bottom or right side to fill the indent there caused by the shift. The default Delete option for the direction of that shift is in our case upwards. Hence after applying the .Delete after applying .SpecialCells(xlBlanks) to the above range, ( pseudo like doing something this Range(“B9:B10,B14”).Delete(Shift:=xlUp) ) we will be left with
Row\Col
B

92018, 1, 90515, 10024515, G9, SBlabla (HQ), CHE, BLABLA, blabla, 10012098, 12003.5


102018, 1, 90629, 10022334, P3, BLABLA blabla (blablabla), CHE, BLABLA,blabla, 10033609, 13941.72


112018, 1, 90709, 10020009, P4, Blabla og Blalala (NY), CHE, Blabla,Bla-ah, 10006098, 15392.64


122018, 1, 90765, 10012123, P4, Ch of Blabla(Blabla of Blabla), CHE, BLA-BLA,Bla Blabla, 10005678, 16231.7


13


14

What has happened there is the following: Those empty cells ( which were yellow ) have been removed. Other cells have been shifted up to fill up the “holes” created by the removal
( Rick’s code line actually deletes the EntireRow of that row on which the empty cells are found )

_.______________________________________________

Just to make clear once again what seems to go on in these sort of Evaluate formulas, in the next post is a table showing the actual Evaluateions done by VBA

DocAElstein
01-09-2019, 09:54 PM
Simplest Examples: using a UDF to change the values of other cells
Doing a P in a few cells, the number determined by some cell value.
Consider that a number in some arbitrary cell , say A2 , should determine how many cells in column C get a P in them.
In addition , cell D2 should be a message telling you all about it. This latter requirement would be a normal simple use of either a simple formula or a very simple UDF formula in the cell D2
But the requirement of putting a certain number of Ps down column C would normally be regarded as one requiring
_ a complicated array formula, and that formula would need to extend as far down as the likely maximum wanted number of Ps
or
_ the use of VBA, possibly event coding,
or
_ human interaction to manually do a P in some cells.
_
But we can do it with the simple UDF formula which we would use in the cell D2 , if that UDF also uses an
_ Evaluate "ProcedureToPutThePsIn"
code line in it which will set off the procedure with the name _ ProcedureToPutThePsIn
ProcedureToPutThePsIn can be any normal procedure, ( with a few restrictions. )
_
Solution:
Paste these two codes into a normal code module.

' Paste these two codes into a normal code module. The type in cell D2 =PInCells(A2) then hit Enter. If you now type a number into cell A2 then both the procedures above will excecute
Function PInCells(ByVal Rng As Range) As String ' The function can be thought of as a "variable" that gets filled with a string ( below in the last line** ) , so it needs to be of string type
Dim Nmbr As Long: Let Nmbr = Rng.Value ' A typical bit of coding in the UDF
Evaluate "PutInCells(" & Nmbr & ")" ' This is the special Evaluate "ProcedureToPutThePsIn" piece which helps us contradict the falsly held belief thatz
Let PInCells = "You did " & Nmbr & " Ps in column C" ' A typical piece of coding often towards the end in a UDF giving the function "variable" the return values **
End Function
Sub PutInCells(ByVal Nbr As Long) ' This is a simple normal procedure. It takes in a number which it then uses to determing the size of the range to apply a single value to
Stop ' This won't work. it will be ignored
ActiveSheet.Range("C1:C20").ClearContents ' this wont work. it will be ignored
Let ActiveSheet.Range("C1:C20").Value = "" ' this is a workaround to achieve what the last line would normally do
Let ActiveSheet.Range("C1:C" & Nbr & "").Value = "P"
End Sub

Now type in cell D2 =PInCells(A2) and then hit Enter.
Row\ColCDE
1

2=PInCells(A2)

3

If you now type a number into cell A2 then both the procedures above will execute. For example typing 2 in cell A2 you will get
Row\ColABCDE
1P

2
2PYou did 2 Ps in column C

3



Rick’s example (https://excelfox.com/forum/showthread.php/1519-Breaking-the-rules-for-UDF-s-(User-Defined-Functions))
The main difference, ( and the only significant difference in my version of Rick’s coding ) is that here there is no use of the Excel Hyperlink function
Put these macros in a normal code module

' Put these macros in a normal code module. Now put this UDF calling formula, =DoCool(B3) , in a cell, say, C3… The procedure, TooCool(arg , ) , is the one used in the Evaluate "Procedure to do stuff to other cells" code line. That procedure gives us the output in , that is to say changes the cell value of , J3
' The second part of the function below is conventional UDF stuff. The first part is the bit what lets us change values in cells other than that in which our UDF is placed in the worksheet
Function DoCool(ByVal Rng As Range) As String
Rem 1 ' The next code line(s) is the Evaluate "SomeOtherProcedureToDoAnythingAnywhere(Arg _ , _ )" code line
' Evaluate "'" & ThisWorkbook.Path & "\UDF to modify other cells.xls'!Module1.TooCool(" & Rng.Address & ",J3)
'' or
' Evaluate "'UDF to modify other cells.xls'!Module1.TooCool(" & Rng.Address & ",J3)"
'' or
' Evaluate "Module1.TooCool(" & Rng.Address & ",J3)"
'' or
Evaluate "TooCool(" & Rng.Address & ",J3)"
'_---------------------------------------------------------------------
Rem 2 ' Conventional UDF coding below
If Rng.Value < 0 Then
Let DoCool = "Number in " & Rng.Address(RowAbsolute:=False, ColumnAbsolute:=False) & " is less than zero."
Else
Let DoCool = "Number in " & Rng.Address(RowAbsolute:=False, ColumnAbsolute:=False) & " is greater than, or equal to, zero."
End If
End[ Function
'
' The procedure below is a conventional procedure to put something in a cell.
Sub TooCool(ByVal InCell As Range, ByVal PushTo As Range)
Let PushTo.Value = "The square of " & InCell.Value & " (in " & InCell.Address(RowAbsolute:=False, ColumnAbsolute:=False) & ") is " & InCell.Value ^ 2 & "."
End Sub

Now put this UDF calling formula, =DoCool(B3) , in a cell, say, C3 …
The procedure, TooCool(arg , _ ) , is the one used in the
_ Evaluate "Procedure to do stuff to other cells"
code line. That procedure gives us the output in , that is to say changes the cell value of , J3

Row\ColBCD
2

3=DoCool(B3)

4

Row\ColBCDEFGHIJK
2

3Number in B3 is greater than, or equal to, zero.The square of (in B3) is 0.

4

Row\ColBCDEFGHIJK
2

3
-2Number in B3 is less than zero.The square of -2 (in B3) is 4.

4

DocAElstein
01-09-2019, 09:55 PM
Continued from last post

In a range evaluate type code line like the one we are considering, Excel VBA seems to do the following ( simplified ) ( refs *** )

Excel will have an output "window" ( this could be considered as an output table or output array ). The dimensions of this will be that rectangle that allows all used ranges in the formula to be fitted in,
There are some complicated ways in which Excel handles the situation of ranges of varying size, ( http://www.excelfox.com/forum/showthread.php/2145-Excel-VBA-Interception-and-Implicit-Intersection-and-VLookUp ) but for a simpler case of all ranges having the same size, ( in terms of "width" and "depth" ) , as we have, Excel VBA will "expand" its "output window" to this sort of thing:


















































































Excel VBA will do its normal "along the columns, down a row, along the columns…" type thing, in any "Evaluation run". In our case this will mean that it does an evaluation at each row, going down the rows. This is what Excel VBA does in order to fill that last window of cells, ( I am just showing the first 7 of 40 similar formulas as the full list is to big to fit in a forum post )

=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2," ",""),",","")),IF(LEFT(A1,4)="2018",TRIM(A1&" "&A2),""),IF(LEFT(A1,4)="2018",A1,""))

=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A3," ",""),",","")),IF(LEFT(A2,4)="2018",TRIM(A2&" "&A3),""),IF(LEFT(A2,4)="2018",A2,""))

=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A4," ",""),",","")),IF(LEFT(A3,4)="2018",TRIM(A3&" "&A4),""),IF(LEFT(A3,4)="2018",A3,""))

=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A5," ",""),",","")),IF(LEFT(A4,4)="2018",TRIM(A4&" "&A5),""),IF(LEFT(A4,4)="2018",A4,""))

=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A6," ",""),",","")),IF(LEFT(A5,4)="2018",TRIM(A5&" "&A6),""),IF(LEFT(A5,4)="2018",A5,""))

=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A7," ",""),",","")),IF(LEFT(A6,4)="2018",TRIM(A6&" "&A7),""),IF(LEFT(A6,4)="2018",A6,""))

=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A8," ",""),",","")),IF(LEFT(A7,4)="2018",TRIM(A7&" "&A8),""),IF(LEFT(A7,4)="2018",A7,""))


Excel VBA will effectively make 40 formulas and place in the "output window" the result of the evaluation of those formulas
The full demo code in the next post includes a code line to put in all 40 formulas in an arbitrary 40 "deep" x 1 "wide" range ("J5:J44")






refs ***
http://www.excelfox.com/forum/showthread.php/2146-%E0%A4%AC%E0%A5%8D%E0%A4%B2%E0%A5%89%E0%A4%97-%E0%A4%95%E0%A5%8B%E0%A4%B6%E0%A4%BF%E0%A4%B6-%E0%A4%95%E0%A4%B0-%E0%A4%B0%E0%A4%B9%E0%A4%BE-%E0%A4%B9%E0%A5%88-%D8%A8%D9%84%D8%A7%DA%AF%D8%B2-%DA%A9%DB%8C-%DA%A9*Trying-Blogs/page3#post10201

DocAElstein
01-09-2019, 09:55 PM
Some other notes for a Thread post , I forgot where, ignore for now....

Some other notes for a Thread post , I forgot where


Put this coding in a normal code module

Now type the following in any cell , ( other than cell (A2) ) , and hit enter

If this works for you, then in cell A2 you will get the text, Changed by UDF in cell A2


The following information may be difficult for you to understand, but possibly it is useful to include in this Thread for others…
What you are wanting to do is often regarded as impossible. For example, in post #2 , https://www.myonlinetraininghub.com/excel-forum/vba-macros/pass-named-range-to-vba-function#p18256 , Veloria, she did say…. you can't select another cell in a UDF called from a cell ….
More commonly we hear it said…. a UDF can only change values in the cell that it is in ….
That is not true, mostly.
The snag often regarded as leading to the claim that a UDF can only change values in the cell that it is in, is a direct consequence of the way an Excel spreadsheet is updated in the simplest case. In Layman’s terms, “you can’t lift up a rake when your standing on it….”: To aid efficiency a simple UDF is in the simplest calculation change: things are done in something which can approximately regarded as a simple sequential way , ( we may experience it as along columns then down rows ).
We know that **exposing an interface in Visual Basic triggers functions allowing us to write some beautiful flowing single line codes. To prevent a possible chaos caused by this, Excel has a dependency tree which informs Excel about which cells depend on which others, or equivalently, which cells are precedents for which others. From this tree, Excel constructs a calculation chain
By examining dependency trees we can find way to force a reconstruction of the calculation chain, “after the event” , as it were. There are many ways to do this, probably most of them requiring a convoluted workaround like passing memory locations and copying memory blocks.
A few people, Rick Rothstein, for example, have noticed that we can achieve the same very simply by exposing the UDF interface within a simple Hyperlink
=Hyperlink(MyUDF())
It really is as simple as that.

Exploring the working of that in more detail
**Calling macros is linked into range names , and names in general, as we see by one method used to run Excel 4 Macros: Named Ranges and string references path links are synonymous.
Although there is no documentation on this, it is a direct consequence that a function which requires a string reference will also take a name and result in exposing an interface. That’s what’s going on here.
**This is so fundamental to the working of Excel , and cannot be so easily changed, and explains for example, why we still have many novel solutions available to us via Excel 4 Macros. Its unlikely therefore to not work in newer versions, but as a last disclaimer, I should say I have not tested in newer versions.
But I can do, and have done , this consistently in my Excel 2002 to 2013 working on a number of different computers with operating systems from XP to Windows 10
This means that in general something of the following works, and we have no restrictions on our UDF changing values of any cells anywhere
=Hyperlink('C:Mypath\MyWorkbook.xls'!Module1. MyUDF())
Excel is good at guessing what we mean when we miss things out, and so we can , in the practice, reduce that to
=Hyperlink(MyUDF())

Ref
https://www.myonlinetraininghub.com/excel-4-macro-functions
https://docs.microsoft.com/en-us/office/client-developer/excel/excel-recalculation
https://www.excelforum.com/excel-programming-vba-macros/1303563-function-sub-exiting-early-except-when-called-from-developer-tab.html#post5265903
https://www.excelforum.com/excel-charting-and-pivots/1131728-trigger-a-macro-or-worksheet-event-with-a-udf.html#post4343285

_._____________________________-

Let me bring that all back to your specific example.
First you create this UDF

DocAElstein
01-09-2019, 09:56 PM
Full demo code to accompany last post:

Option Explicit
Sub ThisShouldWork()
Dim LastRow As Long, strEval As String
Let LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Let strEval = Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow)
Debug.Print strEval ' Hit Ctrl+g from the VB Editor to get the Immediate window up. 'IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A41," ",""),",","")),IF(LEFT(A1:A40,4)="2018",TRIM(A1:A40&" "&A2:A41),""),IF(LEFT(A1:A40,4)="2018",A1:A40,""))
'This is the spreadsheet equivalent to Rick's Evaluate
Range("B1:B" & LastRow).FormulaArray = "=" & strEval
'This gives a demo of the actual formulas that Excel VBA does
Range("J5:J44").Value = "=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2,"" "",""""),"","","""")),IF(LEFT(A1,4)=""2018"",TRIM(A1&"" ""&A2),""""),IF(LEFT(A1,4)=""2018"",A1,""""))" ' Applying the fixed vector notation (Excel instructed to do that by no $s) will result in the same relative formula. Displayed will be the actual formula ( in the relative form, but that is not important)

' Final solution Rick : http://www.excelfox.com/forum/showthread.php/2293-Move-values-in-rows-at-the-end-of-the-preceding-row?p=10888#post10888
Range("A1:A" & LastRow) = Evaluate(Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow))
' Range("A1:A" & LastRow).SpecialCells(xlBlanks).EntireRow.Delete ' This will mess up now due to my .FormulaArray as you can't delete bits of that
End Sub



' 2018, 1, 90709, 10020009, P4, Blabla og Blalala (NY), CHE, Blabla,Bla-ah, 10006098, 15392.64
' TRIM(A13" "&A14)

' IF( True , TRIM(A13" "&A14) , A13 )


' IF( ISNUMBER(0+1000609815392.64), TRIM(A13" "&A14) , A13 )
' IF( ISNUMBER(0+SUBSTITUTE(10006098,15392.64),",","")), TRIM(A13" "&A14) , A13 )

' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), TRIM(A13" "&A14) , A13 ) )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )


' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),"") , IF(LEFT(A13,4)="2018",A13,"") )
' IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),""),IF(LEFT(A13,4)="2018",A13,""))


and here it is again ... in "Ricks Table Code Tags" ( http://www.excelfox.com/forum/showthread.php/1976-Code-Tag-Test-with-Long-Comments?p=10902#post10902 )



Option Explicit
Sub ThisShouldWork()
Dim LastRow As Long, strEval As String
Let LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Let strEval = Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow)
Debug.Print strEval ' Hit Ctrl+g from the VB Editor to get the Immediate window up. 'IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A41," ",""),",","")),IF(LEFT(A1:A40,4)="2018",TRIM(A1:A40&" "&A2:A41),""),IF(LEFT(A1:A40,4)="2018",A1:A40,""))
'This is the spreadsheet equivalent to Rick's Evaluate
Range("B1:B" & LastRow).FormulaArray = "=" & strEval
'This gives a demo of the actual formulas that Excel VBA does
Range("J5:J44").Value = "=IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2,"" "",""""),"","","""")),IF(LEFT(A1,4)=""2018"",TRIM(A1&"" ""&A2),""""),IF(LEFT(A1,4)=""2018"",A1,""""))" ' Applying the fixed vector notation (Excel instructed to do that by no $s) will result in the same relative formula. Displayed will be the actual formula ( in the relative form, but that is not important)

' Final solution Rick : http://www.excelfox.com/forum/showthread.php/2293-Move-values-in-rows-at-the-end-of-the-preceding-row?p=10888#post10888
Range("A1:A" & LastRow) = Evaluate(Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow))
' Range("A1:A" & LastRow).SpecialCells(xlBlanks).EntireRow.Delete ' This will mess up now due to my .FormulaArray as you can't delete bits of that
End Sub



' 2018, 1, 90709, 10020009, P4, Blabla og Blalala (NY), CHE, Blabla,Bla-ah, 10006098, 15392.64
' TRIM(A13" "&A14)

' IF( True , TRIM(A13" "&A14) , A13 )


' IF( ISNUMBER(0+1000609815392.64), TRIM(A13" "&A14) , A13 )
' IF( ISNUMBER(0+SUBSTITUTE(10006098,15392.64),",","")), TRIM(A13" "&A14) , A13 )

' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), TRIM(A13" "&A14) , A13 ) )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )


' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")), IF(LEFT(A13,4)="2018" , TRIM(A13" "&A14) , "") , IF( LEFT(A13,4)="2018" , A13 ,"" ) )
' IF( ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),"") , IF(LEFT(A13,4)="2018",A13,"") )
' IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A14," ",""),",","")),IF(LEFT(A13,4)="2018",TRIM(A13" "&A14),""),IF(LEFT(A13,4)="2018",A13,""))



remember to scroll down first to find the scroll bar:
Scroll down to find Ricks Code bar.JPG : https://imgur.com/R3jgXek
2136

DocAElstein
01-09-2019, 09:56 PM
XXNVCX:;YNXYN

DocAElstein
01-30-2019, 01:08 AM
test post in support of this forum question
http://www.eileenslounge.com/viewtopic.php?f=30&t=31691&p=245488#p245485


Yellow is effectively the array fed to a sort routine.
Green is how that array looks like after running the sort routine

_____ Workbook: YassBub.xlsm ( Using Excel 2007 32 bit )


2
10
8
2
16
8
1
10
15
2


8
1
10
15
2
19
6
3
14
13


15
15
10
6
13
13
7
6
15
16


2
17
2
8
3
5
9
11
12
8


15
12
15
4
5
2
10
8
2
16


13
13
6
4
11
15
12
15
4
5


19
6
3
14
13
13
13
6
4
11


5
9
11
12
8
15
15
10
6
13


14
18
18
16
20
2
17
2
8
3


13
7
6
15
16
14
18
18
16
20
Worksheet: Sheet1


_____ Workbook: YassBub.xlsm ( Using Excel 2007 32 bit )


14
2
2.9986
17
1
1.9983


15
6
6.9985
19
1
1.9981


16
3
3.9984
20
1
1.998


17
1
1.9983
14
2
2.9986


18
2
2.9982
18
2
2.9982


19
1
1.9981
16
3
3.9984


20
1
1.998
15
6
6.9985
Worksheet: Sheet1

_____ Workbook: YassBub.xlsm ( Using Excel 2007 32 bit )


15
4
5
15
4
5


6
4
11
6
4
11


3
14
13
3
14
13
Worksheet: Sheet1



Test calling routine : ( called routines in next 2 posts )

Sub TestsStringArray() ' http://www.eileenslounge.com/viewtopic.php?f=30&t=31691&p=245488#p245488
Dim arrSel() As Variant
Let arrSel() = Selection.Value
Dim DumDom() As String: ReDim DumDom(0 To UBound(arrSel(), 1) - 1, 0 To UBound(arrSel(), 2) - 1)
Dim rCnt As Long, cCnt As Long
For rCnt = 0 To UBound(arrSel(), 1) - 1
For cCnt = 0 To UBound(arrSel(), 2) - 1
Let DumDom(rCnt, cCnt) = CStr(arrSel(rCnt + 1, cCnt + 1))
Next cCnt
Next rCnt
Call subSort2DArrayMultiElements(DumDom(), "1 2")
' Paste reorganised Array next to the selection
Dim OutRange As Range: Set OutRange = Selection.Offset(0, Selection.Columns.Count)
Let OutRange.Value = DumDom()
End Sub



_____ Workbook: YassBub.xlsm ( Using Excel 2007 32 bit )


Sub
sub
d
Sub
func
h


Sub
func
h
Pub
pub
a


sub
pub
x
func
pub
m


func
pub
m
Pub
pub
p


func
pub
r
func
pub
r


Pub
pub
a
sub
pub
x


Pub
pub
p
Sub
sub
d
Worksheet: Sheet1

DocAElstein
01-30-2019, 01:08 AM
SFNSAFSAFS

https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)
https://www.youtube.com/watch?v=bRd4mJglWiM&lc=UgxRmh2gFhpmHNnPemR4AaABAg.A0opm95t2XEA0q3Kshmu uY (https://www.youtube.com/watch?v=bRd4mJglWiM&lc=UgxRmh2gFhpmHNnPemR4AaABAg.A0opm95t2XEA0q3Kshmu uY)
https://www.youtube.com/watch?v=bRd4mJglWiM&lc=UgxRmh2gFhpmHNnPemR4AaABAg (https://www.youtube.com/watch?v=bRd4mJglWiM&lc=UgxRmh2gFhpmHNnPemR4AaABAg)
https://eileenslounge.com/viewtopic.php?p=318868#p318868 (https://eileenslounge.com/viewtopic.php?p=318868#p318868)
https://eileenslounge.com/viewtopic.php?p=318311#p318311 (https://eileenslounge.com/viewtopic.php?p=318311#p318311)
https://eileenslounge.com/viewtopic.php?p=318302#p318302 (https://eileenslounge.com/viewtopic.php?p=318302#p318302)
https://eileenslounge.com/viewtopic.php?p=317704#p317704 (https://eileenslounge.com/viewtopic.php?p=317704#p317704)
https://eileenslounge.com/viewtopic.php?p=317704#p317704 (https://eileenslounge.com/viewtopic.php?p=317704#p317704)
https://eileenslounge.com/viewtopic.php?p=317857#p317857 (https://eileenslounge.com/viewtopic.php?p=317857#p317857)
https://eileenslounge.com/viewtopic.php?p=317541#p317541 (https://eileenslounge.com/viewtopic.php?p=317541#p317541)
https://eileenslounge.com/viewtopic.php?p=317520#p317520 (https://eileenslounge.com/viewtopic.php?p=317520#p317520)
https://eileenslounge.com/viewtopic.php?p=317510#p317510 (https://eileenslounge.com/viewtopic.php?p=317510#p317510)
https://eileenslounge.com/viewtopic.php?p=317547#p317547 (https://eileenslounge.com/viewtopic.php?p=317547#p317547)
https://eileenslounge.com/viewtopic.php?p=317573#p317573 (https://eileenslounge.com/viewtopic.php?p=317573#p317573)
https://eileenslounge.com/viewtopic.php?p=317574#p317574 (https://eileenslounge.com/viewtopic.php?p=317574#p317574)
https://eileenslounge.com/viewtopic.php?p=317582#p317582 (https://eileenslounge.com/viewtopic.php?p=317582#p317582)
https://eileenslounge.com/viewtopic.php?p=317583#p317583 (https://eileenslounge.com/viewtopic.php?p=317583#p317583)
https://eileenslounge.com/viewtopic.php?p=317605#p317605 (https://eileenslounge.com/viewtopic.php?p=317605#p317605)
https://eileenslounge.com/viewtopic.php?p=316935#p316935 (https://eileenslounge.com/viewtopic.php?p=316935#p316935)
https://eileenslounge.com/viewtopic.php?p=317030#p317030 (https://eileenslounge.com/viewtopic.php?p=317030#p317030)
https://eileenslounge.com/viewtopic.php?p=317030#p317030 (https://eileenslounge.com/viewtopic.php?p=317030#p317030)
https://eileenslounge.com/viewtopic.php?p=317014#p317014 (https://eileenslounge.com/viewtopic.php?p=317014#p317014)
https://eileenslounge.com/viewtopic.php?p=316940#p316940 (https://eileenslounge.com/viewtopic.php?p=316940#p316940)
https://eileenslounge.com/viewtopic.php?p=316927#p316927 (https://eileenslounge.com/viewtopic.php?p=316927#p316927)
https://eileenslounge.com/viewtopic.php?p=316875#p316875 (https://eileenslounge.com/viewtopic.php?p=316875#p316875)
https://eileenslounge.com/viewtopic.php?p=316704#p316704 (https://eileenslounge.com/viewtopic.php?p=316704#p316704)
https://eileenslounge.com/viewtopic.php?p=316412#p316412 (https://eileenslounge.com/viewtopic.php?p=316412#p316412)
https://eileenslounge.com/viewtopic.php?p=316412#p316412 (https://eileenslounge.com/viewtopic.php?p=316412#p316412)
https://eileenslounge.com/viewtopic.php?p=316254#p316254 (https://eileenslounge.com/viewtopic.php?p=316254#p316254)
https://eileenslounge.com/viewtopic.php?p=316046#p316046 (https://eileenslounge.com/viewtopic.php?p=316046#p316046)
https://eileenslounge.com/viewtopic.php?p=317050&sid=d7e077e50e904a138c794e1f2115da95#p317050 (https://eileenslounge.com/viewtopic.php?p=317050&sid=d7e077e50e904a138c794e1f2115da95#p317050)
https://www.youtube.com/@alanelston2330 (https://www.youtube.com/@alanelston2330)
https://www.youtube.com/watch?v=yXaYszT11CA&lc=UgxEjo0Di9-9cnl8UnZ4AaABAg.9XYLEH1OwDIA35HNIei0z- (https://www.youtube.com/watch?v=yXaYszT11CA&lc=UgxEjo0Di9-9cnl8UnZ4AaABAg.9XYLEH1OwDIA35HNIei0z-)
https://eileenslounge.com/viewtopic.php?p=316154#p316154 (https://eileenslounge.com/viewtopic.php?p=316154#p316154)
https://www.youtube.com/watch?v=TW3l7PkSPD4&lc=UgwAL_Jrv7yg7WWC8x14AaABAg (https://www.youtube.com/watch?v=TW3l7PkSPD4&lc=UgwAL_Jrv7yg7WWC8x14AaABAg)
https://teylyn.com/2017/03/21/dollarsigns/#comment-191 (https://teylyn.com/2017/03/21/dollarsigns/#comment-191)
https://eileenslounge.com/viewtopic.php?p=317050#p317050 (https://eileenslounge.com/viewtopic.php?p=317050#p317050)
https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA (https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA)

DocAElstein
01-30-2019, 01:18 AM
Routines called by test code , Sub TestsStringArray() , in last post:



Sub subSort2DArrayMultiElements( _
sparray() As String, _
spOrder As String _
)
' Sort an array with TWO dimensions.
' Assume Sort on the 2nd Dimension
' so assumes it IS a 2 Dim array.
' Sort on more than one element.
'
' This uses a merge sort.
' The sort is set up as ascending and not case sensitive.
'
' Use
' subSortMultiElements Array, Order
'
' Ex Order = "1 4 0 3 2".
' Not all elements need be specified.
' Any delimiter may be used.
'

Dim lnglArrayIndex As Long
Dim lnglElements As Long
Dim lnglEndArray As Long
Dim lnglKey As Long
Dim lnglLbound As Long
Dim lnglM As Long
Dim lnglN As Long
Dim lnglNumSortKeys As Long
Dim lnglO As Long
Dim lnglP As Long
Dim lnglPrevKeyCol As Long
Dim lnglThisKeyCol As Long
Dim lnglUBound As Long
Dim lngSubArrayRows As Long
Dim slKeyVal As String
Dim slOrder As String
Dim slOrderArray() As String
Dim slSubArray() As String
Dim slTopKeyVal As String

lnglElements = UBound(sparray, 2)

' Make an Order Array.
slOrder = spOrder

' Delimiter?
' Disappear the numbers.
For lnglN = 0 To 9
slOrder = Replace(slOrder, CStr(lnglN), "")
Next lnglN
slOrder = Trim$(slOrder)

' Should only have the delimiter left.
If Len(slOrder) = 0 Then
slOrderArray = Split(spOrder, " ")
Else
slOrderArray = Split(spOrder, Mid$(slOrder, 1, 1))
End If

lnglNumSortKeys = UBound(slOrderArray) + 1

' Always Sort on the FIRST Key.
lnglKey = CLng(slOrderArray(0))
subArrayMergeSort sparray, lnglKey

' Only one key?
If lnglNumSortKeys = 1 Then

Exit Sub

End If

' Now go through the rest of the keys.
' We extract a series of arrays based on the KEY - 1.
' Any records to sort?
If UBound(slOrderArray) > 0 Then
For lnglN = 1 To lnglNumSortKeys - 1

' Pick up the start Value from Key-1.
lnglPrevKeyCol = slOrderArray(lnglN - 1)
lnglThisKeyCol = slOrderArray(lnglN)

slTopKeyVal = sparray(0, lnglPrevKeyCol)

lnglLbound = 0
lnglUBound = UBound(sparray, 1)

' All the same.
If sparray(lnglUBound, 0) = slTopKeyVal Then
Exit For
End If

lnglArrayIndex = 0
lnglEndArray = UBound(sparray)
Do
lnglLbound = lnglArrayIndex
slTopKeyVal = sparray(lnglArrayIndex, lnglPrevKeyCol)
Do
If lnglArrayIndex > lnglEndArray Then
Exit Do
End If

slKeyVal = sparray(lnglArrayIndex, lnglPrevKeyCol)

If slKeyVal <> slTopKeyVal Then

lnglUBound = lnglArrayIndex - 1
Exit Do

End If

lnglArrayIndex = lnglArrayIndex + 1

Loop

' No need to sort if there's only ONE row.
lngSubArrayRows = lnglUBound - lnglLbound
If lngSubArrayRows > 1 Then


' Get those rows.
ReDim slSubArray(lnglUBound - lnglLbound, lnglElements)
lnglP = 0
For lnglM = lnglLbound To lnglUBound
For lnglO = 0 To lnglElements
slSubArray(lnglP, lnglO) = sparray(lnglM, lnglO)
Next lnglO
lnglP = lnglP + 1
Next lnglM

' Sort 'em.
subArrayMergeSort slSubArray, lnglThisKeyCol

' Put 'em back.
lnglP = 0
For lnglM = lnglLbound To lnglUBound
For lnglO = 0 To lnglElements
sparray(lnglM, lnglO) = slSubArray(lnglP, lnglO)
Next lnglO
lnglP = lnglP + 1
Next lnglM

End If

If lnglArrayIndex > lnglEndArray Then
Exit Do
End If

Loop

Next lnglN
End If

' ************************************************** *********************
End Sub

DocAElstein
01-30-2019, 01:18 AM
KVKDLDKLJ

DocAElstein
01-30-2019, 01:18 AM
Sub subArrayMergeSort( _
ByRef vpArray As Variant, _
ByVal lngpElement As Long, _
Optional vpMirror As Variant, _
Optional ByVal lngpLeft As Long, _
Optional ByVal lngpRight As Long _
)
' http://www.vbforums.com/showthread.php?t=473677
'
' Recurse Merge Sort a TWO Dim array.
'
' Use...
' subMergeSort Array, Element
'
' lngpLeft and lngpRight are 0 at the start.
'
' Sorts on ONE element.
'

Dim blnlRightIsLessThanLeft As Boolean
Dim blnlLeftIsGreaterThanRight As Boolean
Dim blnlIsNumeric As Boolean
Dim lnglLeftStart As Long
Dim lnglMid As Long
Dim lnglOutputStart As Long
Dim lnglRightStart As Long
Dim vlSwap As Variant
Dim lnglCElement As Long
Dim lnglNumElements As Long
Dim vlSwapRow() As Variant

' This is just to gain a tiiiny bit of speed.
If IsNumeric(vpArray(0, lngpElement)) = True Then
blnlIsNumeric = True
Else
blnlIsNumeric = False
End If

lnglNumElements = UBound(vpArray, 2)
ReDim vlSwapRow(lnglNumElements)
If lngpRight = 0 Then
lngpLeft = LBound(vpArray, 1)
lngpRight = UBound(vpArray, 1)
ReDim vpMirror(lngpLeft To lngpRight, 0 To lnglNumElements)
End If
lnglMid = lngpRight - lngpLeft

Select Case lnglMid
Case 0

Case 1

' Changed this to make it case insensitive.
' If vpArray(lngpLeft) > vpArray(lngpRight) Then
If blnlIsNumeric = True Then
If CLng(vpArray(lngpLeft, lngpElement)) _
> CLng(vpArray(lngpRight, lngpElement)) _
Then
blnlLeftIsGreaterThanRight = True
Else
blnlLeftIsGreaterThanRight = False
End If
Else
If StrComp( _
vpArray(lngpLeft, lngpElement), _
vpArray(lngpRight, lngpElement), _
vbTextCompare) _
= 1 _
Then
blnlLeftIsGreaterThanRight = True
Else
blnlLeftIsGreaterThanRight = False
End If
End If

If blnlLeftIsGreaterThanRight Then

' SWAP the whole row.
For lnglCElement = 0 To lnglNumElements
vlSwapRow(lnglCElement) = vpArray(lngpLeft, lnglCElement)
Next lnglCElement

For lnglCElement = 0 To lnglNumElements
vpArray(lngpLeft, lnglCElement) = vpArray(lngpRight, lnglCElement)
Next lnglCElement

For lnglCElement = 0 To lnglNumElements
vpArray(lngpRight, lnglCElement) = vlSwapRow(lnglCElement)
Next lnglCElement

' vlSwap = vpArray(lngpLeft)
' vpArray(lngpLeft) = vpArray(lngpRight)
' vpArray(lngpRight) = vlSwap

End If

Case Else

lnglMid = lnglMid \ 2 + lngpLeft
subArrayMergeSort vpArray, lngpElement, vpMirror, lngpLeft, lnglMid
subArrayMergeSort vpArray, lngpElement, vpMirror, lnglMid + 1, lngpRight

' Merge the resulting halves

lnglLeftStart = lngpLeft ' start of first (left) half
lnglRightStart = lnglMid + 1 ' start of second (right) half
lnglOutputStart = lngpLeft ' start of output (mirror array)

Do

' Changed this to make it case insensitive.
' If vpArray(lnglRightStart) < vpArray(lnglLeftStart) Then

If blnlIsNumeric = True Then

If CLng(vpArray(lnglRightStart, lngpElement)) _
< CLng(vpArray(lnglLeftStart, lngpElement)) _
Then
blnlRightIsLessThanLeft = True
Else
blnlRightIsLessThanLeft = False
End If
Else
If StrComp( _
vpArray(lnglRightStart, lngpElement), _
vpArray(lnglLeftStart, lngpElement), _
vbTextCompare) = _
-1 _
Then
blnlRightIsLessThanLeft = True
Else
blnlRightIsLessThanLeft = False
End If
End If

If blnlRightIsLessThanLeft Then

' COPY the complete row.
' vpMirror(lnglOutputStart) = vpArray(lnglRightStart)
For lnglCElement = 0 To lnglNumElements
vpMirror(lnglOutputStart, lnglCElement) = vpArray(lnglRightStart, lnglCElement)
Next lnglCElement


lnglRightStart = lnglRightStart + 1
If lnglRightStart > lngpRight Then
For lnglLeftStart = lnglLeftStart To lnglMid
lnglOutputStart = lnglOutputStart + 1

' COPY the whole row.
' vpMirror(lnglOutputStart) = vpArray(lnglLeftStart)
For lnglCElement = 0 To lnglNumElements
vpMirror(lnglOutputStart, lnglCElement) = vpArray(lnglLeftStart, lnglCElement)
Next lnglCElement

Next
Exit Do
End If
Else

' COPY the complete row.
' vpMirror(lnglOutputStart) = vpArray(lnglLeftStart)
For lnglCElement = 0 To lnglNumElements
vpMirror(lnglOutputStart, lnglCElement) = vpArray(lnglLeftStart, lnglCElement)
Next lnglCElement


lnglLeftStart = lnglLeftStart + 1
If lnglLeftStart > lnglMid Then
For lnglRightStart = lnglRightStart To lngpRight
lnglOutputStart = lnglOutputStart + 1

' COPY the complete row.
' vpMirror(lnglOutputStart) = vpArray(lnglRightStart)
For lnglCElement = 0 To lnglNumElements
vpMirror(lnglOutputStart, lnglCElement) = vpArray(lnglRightStart, lnglCElement)
Next lnglCElement

Next

Exit Do
End If
End If

lnglOutputStart = lnglOutputStart + 1

Loop
For lnglOutputStart = lngpLeft To lngpRight

' Swap the complete row.
' vpArray(lnglOutputStart) = vpMirror(lnglOutputStart)
For lnglCElement = 0 To lnglNumElements
vpArray(lnglOutputStart, lnglCElement) = vpMirror(lnglOutputStart, lnglCElement)
Next lnglCElement

Next
End Select

' ************************************************** *******************
End Sub

DocAElstein
02-03-2019, 04:46 PM
Coding for answer to this Thread
https://www.eileenslounge.com/viewtopic.php?f=30&t=31740

There are two main routines. They both are event routines reacting when the range A2 : A_ last data row is used.
A selection change routine will make the drop down list the first time that a cell is selected.
A value change routine, ( in the next post ) , makes a filtered range containing just columns having the selected value in that selected row

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
This makes a drop down list in column A when a cell is selected ( The range of ordered values needed to fill the drop down lists is made by this routine and it is placed in a worksheet with Name "DataSaladinValagationLists" )
This is briefly how this routine works:
It only does anything for a selection in the A column range.
It only does anything if there is not already a range of ordered values needed to fill the drop down list for the selected row
The range of data for that row is copied to the clipboard, excluding empty cells . The text held in the clipboard is retrieved.
A row in Excel is held in the clipboard as a string with a vbTab as separator, and this string also has a trailing vbCr & vbLf which we remove. http://www.eileenslounge.com/viewtopic.php?f=30&t=31395#p242941
A 1 Dimensional array is made from the retrieved string, strSptInDrpPlop() , and this is used to produce a simple string which only has unique cell values in it. This string is then used to replace the strSptInDrpPlop() contents with unique values
The unique values as well as a leading “-“ and trailing “Blank” are pasted out to the worksheet "DataSaladinValagationLists"



Sub test()
Let Application.EnableEvents = True
Call Worksheet_SelectionChange(Me.Range("A3"))
Let Application.EnableEvents = True
End Sub
' =DataSaladinValagationLists!A2:A3



Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' for initial making of list for drop down
If IsArray(Target.Value) Then Exit Sub
Rem 1 main worksheet data range info
Dim CntItms As Long: Let CntItms = Me.Range("B" & Rows.Count & "").End(xlUp).Row
If Application.Intersect(Target, Me.Range("A2:A" & CntItms & "")) Is Nothing Then Exit Sub ' only do anything for a selection in the A column range.
If Worksheets("DataSaladinValagationLists").Range("A" & Target.Row & "").Value <> "" Then Exit Sub ' We already have made a drop down list - only does anything if there is not already a range of ordered values needed to fill the drop down list for the selected row
Dim CntClms As Long: Let CntClms = Me.Cells.Item(1, Columns.Count).End(xlToLeft).Column
Rem 2 make drop down list for this row
' 2a) get unique list of all values in row
Let Application.EnableEvents = False
Me.Range("C" & Target.Row & "", Me.Cells.Item(Target.Row, CntClms)).SpecialCells(xlCellTypeConstants).Copy ' The range of data for that row is copied to the clipboard, excluding empty cells
Let Application.EnableEvents = True
Dim Dtaobj As Object ' Late Binding equivalent' If you declare a variable as Object, you are late binding it. http://excelmatters.com/2013/09/23/vba-references-and-early-binding-vs-late-binding/
Set Dtaobj = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' http://excelmatters.com/2013/10/04/late-bound-msforms-dataobject/ http://www.eileenslounge.com/viewtopic.php?f=30&t=31547#p244124
Dtaobj.GetFromClipboard: Dim strClip As String: Let strClip = Dtaobj.GetText()
Let strClip = Left(strClip, Len(strClip) - 2) ' Take off last vbCr & vbLf
Application.CutCopyMode = False ' Clear clipboard, stop screen flicker
Dim strSptInDrpPlop() As String: Let strSptInDrpPlop() = Split(strClip, vbTab, -1, vbBinaryCompare) ' a row in Excel is held as a string with a vbTab as seperator. The array made here may contain duplicated cell values
Dim UnEeks As String: Let UnEeks = " " ' this string will have unique cell values only. I need an initial " " to make sure i can check for a number like " 7 " not just "7" as that might get confused with "27"
Dim Cnt As Long
For Cnt = 0 To UBound(strSptInDrpPlop())
If InStr(1, UnEeks, " " & Trim(strSptInDrpPlop(Cnt)) & " ", vbBinaryCompare) = 0 And Not Trim(strSptInDrpPlop(Cnt)) = "" And Not strSptInDrpPlop(Cnt) = vbTab Then ' I am not sure yet if the last check is needed.
Let UnEeks = UnEeks & Trim(strSptInDrpPlop(Cnt)) & " " ' A similar string to the original retrieved from the clipboard strClip is made with the difference that the seperator is a space and we have no duplicated cell values
Else
End If
Next Cnt
'Let UnEeks = Replace(UnEeks, vbTab, "", 1, -1, vbBinaryCompare) 'remove rogue vbtabs
Let UnEeks = Mid(UnEeks, 2, Len(UnEeks) - 2) ' take off first and last " " ' Left(UnEeks, Len(UnEeks) - 3) ' take off " " & vbCr & vbLf
'Let UnEeks = "-" & " " & UnEeks & "Blanks"
Let strSptInDrpPlop() = Split(UnEeks, " ", -1, vbBinaryCompare) ' Replace the 1 Dimensional array values with only unique values
' 2b) sort list ( Bubble sort )
Dim Eye As Long, Jay As Long
For Eye = 0 To UBound(strSptInDrpPlop()) - 1 'I want to take the next in the array, starting at the first. The process below should result in the smallest being put at this position, because I go through the rest , the inner Jay loop, and when ever i find something smaller i swap so the smalles comes here
For Jay = Eye + 1 To UBound(strSptInDrpPlop()) ' I now go through comparing with each of the rest, the Jays
If IsNumeric(strSptInDrpPlop(Eye)) And IsNumeric(strSptInDrpPlop(Jay)) Then ' This is to overcome an extra problem that I have: I have strings, and VBA thinks that "6" is bigger than "35" but it thinks 6 is less than 35
If CLng(strSptInDrpPlop(Eye)) > CLng(strSptInDrpPlop(Jay)) Then ' This means that I am bigger than the next. So I will swap . I keep doing this which will have the effect of putting the smallest in the current Eye. By the next Eye, I miss out the last, and any previous, which means I effectively do the same which puts the next smallest in this next Eye
Dim Temp As String: Let Temp = strSptInDrpPlop(Jay): Let strSptInDrpPlop(Jay) = strSptInDrpPlop(Eye): Let strSptInDrpPlop(Eye) = Temp
Else
End If
Else ' if we have text, then VBA still allows a comparison to sort - like B > A returns True
If strSptInDrpPlop(Eye) > strSptInDrpPlop(Jay) Then
Let Temp = strSptInDrpPlop(Jay): Let strSptInDrpPlop(Jay) = strSptInDrpPlop(Eye): Let strSptInDrpPlop(Eye) = Temp ' The element being compared with all the rest is bigger, so we swap it. The effect of this is that the smallest in the rest of the list being looked at, ( The Jay loop ) , will finally end up in the current Eye position.
Else
End If
End If
Next Jay
Next Eye
' 2c) paste in values in DataSaladinValagationLists worksheet
With Worksheets("DataSaladinValagationLists")
Let .Range("A" & Target.Row & "").Value = "-" ' ' a leading "-" ,
Let .Cells.Item(Target.Row, 2).Resize(1, UBound(strSptInDrpPlop()) + 1).Value = strSptInDrpPlop() ' unique values
Let .Cells.Item(Target.Row, UBound(strSptInDrpPlop()) + 3).Value = "Blank" ' ' and trailing "Blank"
End With
' 2d) Make dropdown list
Target.Validation.Delete ' This is only necerssary if a drop down is already there
Target.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=DataSaladinValagationLists!A" & Target.Row & ":" & CLDoWhile(UBound(strSptInDrpPlop()) + 3) & "" & Target.Row & ""
End Sub
Sub testieCLDoWhile()
Dim testieletter As String
Let testieletter = CLDoWhile(3) ' should return "C"
End Sub
' CLDoWhile is a Function to get column letter from column number
Function CLDoWhile(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Dim rest As Long 'Variable for what is "left over" after subtracting as many full 26's as possible
Do
' Let rest = ((lclm - 1) Mod 26) 'Gives 0 to 25 for Column Number "Left over" 1 to 26. Better than ( lclm Mod 26 ) which gives 1 to 25 for clm 1 to 25 then 0 for 26
' Let FukOutChrWithDoWhile = Chr(65 + rest) & FukOutChrWithDoWhile 'Convert rest to Chr Number, initially with full number so the "units" (0-25), then number of 26's left over (if the number was so big to give any amount of 26's in it, then number of 26's in the 26's left over (if the number was so big to give any amount of 26 x 26's in it, Enit ?
' 'OR
Let CLDoWhile = Chr(65 + (((lclm - 1) Mod 26))) & CLDoWhile
Let lclm = (lclm - (1)) \ 26 'This gives the number of 26's ( if any ), but just the excact part, in the next number down , - so applying the rest formula to this new number will again leave a difference "left over" rest.
'lclm = (lclm - (rest + 1)) \ 26 ' As the number is effectively truncated here, any number from 1 to (rest +1) will do in the formula
Loop While lclm > 0 'Only loop further if number was big enough to still have 0-25's in it
End Function
'
'



Sub testsort()

Dim df As String, d As String
df = "df"
Dim var
If IsNumeric(df) Then var = CLng(df)
Dim dg As String
dg = "dg"
MsgBox (dg > df) & " " & (dg > d)
MsgBox "7" < "77"
Dim seven As String, seventyseven As String
Let seven = "7": Let seventyseven = "77"
MsgBox seven < seventyseven
If seven < seventyseven Then MsgBox "True"
Dim arrStr(0 To 1) As String
Let arrStr(0) = "7": Let arrStr(1) = "77"
MsgBox arrStr(0) < arrStr(1)
MsgBox "6" < "34" ' FALSE !!!!!!!!!!******************
End Sub

DocAElstein
02-03-2019, 04:52 PM
continued from last post.......

Private Sub Worksheet_Change(ByVal Target As Range)
This reacts to changes of values in column A, for example when selecting a value from the drop down list
Initially a "Blank" selection is changed to "" , and if a "-" was given then the original range is restored

The rest of this routine is very similar to the routine here https://www.eileenslounge.com/viewtopic.php?f=30&t=31687&p=245286#p245218 The difference is that we need here now to determine one set of column indices to use in a code line like pseudo the following to get the required filtered range
Output() = Index ( Cells , allRowIndicies , someColumnIndicies)
( The previous example at that link required all columns and 2 sets of some rows for two outputs based on a column having a Y or not )





Sub testieCLDoWhile()
Dim testieletter As String
Let testieletter = CLDoWhile(3) ' should return "C"
End Sub
' CLDoWhile is a Function to get column letter from column number
Function CLDoWhile(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Dim rest As Long 'Variable for what is "left over" after subtracting as many full 26's as possible
Do
' Let rest = ((lclm - 1) Mod 26) 'Gives 0 to 25 for Column Number "Left over" 1 to 26. Better than ( lclm Mod 26 ) which gives 1 to 25 for clm 1 to 25 then 0 for 26
' Let FukOutChrWithDoWhile = Chr(65 + rest) & FukOutChrWithDoWhile 'Convert rest to Chr Number, initially with full number so the "units" (0-25), then number of 26's left over (if the number was so big to give any amount of 26's in it, then number of 26's in the 26's left over (if the number was so big to give any amount of 26 x 26's in it, Enit ?
' 'OR
Let CLDoWhile = Chr(65 + (((lclm - 1) Mod 26))) & CLDoWhile
Let lclm = (lclm - (1)) \ 26 'This gives the number of 26's ( if any ), but just the excact part, in the next number down , - so applying the rest formula to this new number will again leave a difference "left over" rest.
'lclm = (lclm - (rest + 1)) \ 26 ' As the number is effectively truncated here, any number from 1 to (rest +1) will do in the formula
Loop While lclm > 0 'Only loop further if number was big enough to still have 0-25's in it
End Function
'
'
Sub testieWksChange()
Call Worksheet_Change(Me.Range("A2"))
Let Application.EnableEvents = True ' Just incase it got turned off
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If IsArray(Target.Value) Then Exit Sub
Rem 1 main worksheet data range info
Dim CntItms As Long: Let CntItms = Me.Range("B" & Rows.Count & "").End(xlUp).Row
If Application.Intersect(Target, Me.Range("A2:A" & CntItms & "")) Is Nothing Then Exit Sub ' only do anything for a selection in the A column range.
Dim CntClms As Long: Let CntClms = Me.Cells.Item(1, Columns.Count).End(xlToLeft).Column
If Target.Value = "Blank" Then Let Application.EnableEvents = False: Let Target.Value = "": Let Application.EnableEvents = True
Rem 2 test data range reset
If Target.Value = "-" Then
Let Application.EnableEvents = False
Let Me.Range("C1", Me.Cells.Item(CntItms, Worksheets("Sheet1 (2)").Cells.Item(1, Columns.Count).End(xlToLeft).Column)).Value = Worksheets("Sheet1 (2)").Range("C1", Worksheets("Sheet1 (2)").Cells.Item(CntItms, Worksheets("Sheet1 (2)").Cells.Item(1, Columns.Count).End(xlToLeft).Column)).Value
Let Application.EnableEvents = True
Rem 3 Get indices( column numbers) for required columns, and all row indicies
'3a) indices( column numbers) for required columns
Else ' selected value is a unique value or "" for "Blank"
Dim arrLine() As Variant: Let arrLine() = Me.Range(Me.Cells.Item(Target.Row, 1), Me.Cells.Item(Target.Row, CntClms)).Value ' I dont need the first and third column, but it makes it easier to keep track of the correct columns indicie
Dim Cnt As Long
Dim strClms As String: Let strClms = "1 2 " ' For our required columns containing in this row the target selected value
For Cnt = 3 To CntClms ' check columns from 3 for a match to the value in column 1
If CStr(arrLine(1, Cnt)) = CStr(Target.Value) Then ' This is indication of wanted column as it contains the value
Let strClms = strClms & Cnt & " "
Else
End If
Next Cnt
Let strClms = Left(strClms, Len(strClms) - 1) ' Take off last " "
Dim clmsSpt() As String: Let clmsSpt() = Split(strClms, " ", -1, vbBinaryCompare)
Dim Clms() As String: ReDim Clms(1 To UBound(clmsSpt()) + 1) ' for {1,2,7,9} = required columns
For Cnt = 0 To UBound(clmsSpt())
Let Clms(Cnt + 1) = clmsSpt(Cnt)
Next Cnt
'3b) all data ro indicies
Dim Rws() As Variant: Let Rws() = Evaluate("=Row(1:" & CntItms & ")") ' = {1;2;3;4;5;6;7;8;9;.......... , CntItms} = required rows ( all rows are required )
Rem 4 Output filtered columns
Dim arrOut() As Variant: Let arrOut() = Application.Index(Cells, Rws(), Clms())
Let Application.EnableEvents = False
Me.Cells.ClearContents
Let Range("A1").Resize(UBound(arrOut(), 1), UBound(arrOut(), 2)).Value = arrOut()
Let Application.EnableEvents = True
End If
End Sub


Sub testsort()

Dim df As String, d As String
df = "df"
Dim var
If IsNumeric(df) Then var = CLng(df)
Dim dg As String
dg = "dg"
MsgBox (dg > df) & " " & (dg > d)


End Sub

DocAElstein
02-03-2019, 08:06 PM
Simplified coding for yasser
https://eileenslounge.com/viewtopic.php?f=30&t=31740&p=245769#p245769

Coding for worksheet code module for worksheet "Sheet1"

Option Explicit
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
If IsArray(Target.Value) Then Exit Sub
Rem 1 main worksheet data range info
Dim CntItms As Long: Let CntItms = Me.Range("B" & Rows.Count & "").End(xlUp).Row
If Application.Intersect(Target, Me.Range("A2:A" & CntItms & "")) Is Nothing Then Exit Sub
If Worksheets("DataSaladinValagationLists").Range("A" & Target.Row & "").Value <> "" Then Exit Sub
Dim CntClms As Long: Let CntClms = Me.Cells.Item(1, Columns.Count).End(xlToLeft).Column
Rem 2 make drop down list for this row

Let Application.EnableEvents = False
Me.Range("C" & Target.Row & "", Me.Cells.Item(Target.Row, CntClms)).SpecialCells(xlCellTypeConstants).Copy
Let Application.EnableEvents = True
Dim Dtaobj As Object
Set Dtaobj = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Dtaobj.GetFromClipboard: Dim strClip As String: Let strClip = Dtaobj.GetText()
Let strClip = Left(strClip, Len(strClip) - 2)
Application.CutCopyMode = False
Dim strSptInDrpPlop() As String: Let strSptInDrpPlop() = Split(strClip, vbTab, -1, vbBinaryCompare)
Dim UnEeks As String
Dim Cnt As Long
For Cnt = 0 To UBound(strSptInDrpPlop())
If InStr(1, UnEeks, Trim(strSptInDrpPlop(Cnt)), vbBinaryCompare) = 0 And Not Trim(strSptInDrpPlop(Cnt)) = "" And Not strSptInDrpPlop(Cnt) = vbTab Then
Let UnEeks = UnEeks & Trim(strSptInDrpPlop(Cnt)) & " "
Else
End If
Next Cnt

Let UnEeks = Left(UnEeks, Len(UnEeks) - 1)

Let strSptInDrpPlop() = Split(UnEeks, " ", -1, vbBinaryCompare)

Dim Eye As Long, Jay As Long
For Eye = 0 To UBound(strSptInDrpPlop()) - 1
For Jay = Eye + 1 To UBound(strSptInDrpPlop())
If IsNumeric(strSptInDrpPlop(Eye)) And IsNumeric(strSptInDrpPlop(Jay)) Then
If CLng(strSptInDrpPlop(Eye)) > CLng(strSptInDrpPlop(Jay)) Then
Dim Temp As String: Let Temp = strSptInDrpPlop(Jay): Let strSptInDrpPlop(Jay) = strSptInDrpPlop(Eye): Let strSptInDrpPlop(Eye) = Temp
Else
End If
Else
If strSptInDrpPlop(Eye) > strSptInDrpPlop(Jay) Then
Let Temp = strSptInDrpPlop(Jay): Let strSptInDrpPlop(Jay) = strSptInDrpPlop(Eye): Let strSptInDrpPlop(Eye) = Temp
Else
End If
End If
Next Jay
Next Eye

With Worksheets("DataSaladinValagationLists")
Let .Range("A" & Target.Row & "").Value = "-"
Let .Cells.Item(Target.Row, 2).Resize(1, UBound(strSptInDrpPlop()) + 1).Value = strSptInDrpPlop()
Let .Cells.Item(Target.Row, UBound(strSptInDrpPlop()) + 3).Value = "Blank"
End With

Target.Validation.Delete
Target.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=DataSaladinValagationLists!A" & Target.Row & ":" & CLDoWhile(UBound(strSptInDrpPlop()) + 3) & "" & Target.Row & ""
End Sub
Function CLDoWhile(ByVal lclm As Long) As String
Dim rest As Long
Do

Let CLDoWhile = Chr(65 + (((lclm - 1) Mod 26))) & CLDoWhile
Let lclm = (lclm - (1)) \ 26

Loop While lclm > 0
End Function
Public Sub Worksheet_Change(ByVal Target As Range)
If IsArray(Target.Value) Then Exit Sub
Rem 1 main worksheet data range info
Dim CntItms As Long: Let CntItms = Me.Range("B" & Rows.Count & "").End(xlUp).Row
If Application.Intersect(Target, Me.Range("A2:A" & CntItms & "")) Is Nothing Then Exit Sub
Dim CntClms As Long: Let CntClms = Me.Cells.Item(1, Columns.Count).End(xlToLeft).Column
If Target.Value = "Blank" Then Let Application.EnableEvents = False: Let Target.Value = "": Let Application.EnableEvents = True
Rem 2 test data range reset
If Target.Value = "-" Then
Let Application.EnableEvents = False
Let Me.Range("C1", Me.Cells.Item(CntItms, Worksheets("Sheet1 (2)").Cells.Item(1, Columns.Count).End(xlToLeft).Column)).Value = Worksheets("Sheet1 (2)").Range("C1", Worksheets("Sheet1 (2)").Cells.Item(CntItms, Worksheets("Sheet1 (2)").Cells.Item(1, Columns.Count).End(xlToLeft).Column)).Value
Let Application.EnableEvents = True
Rem 3 Get indices( column numbers) for required columns, and all row indicies

Else
Dim arrLine() As Variant: Let arrLine() = Me.Range(Me.Cells.Item(Target.Row, 1), Me.Cells.Item(Target.Row, CntClms)).Value
Dim Cnt As Long
Dim strClms As String: Let strClms = "1 2 "
For Cnt = 3 To CntClms
If CStr(arrLine(1, Cnt)) = CStr(Target.Value) Then
Let strClms = strClms & Cnt & " "
Else
End If
Next Cnt
Let strClms = Left(strClms, Len(strClms) - 1)
Dim clmsSpt() As String: Let clmsSpt() = Split(strClms, " ", -1, vbBinaryCompare)
Dim Clms() As String: ReDim Clms(1 To UBound(clmsSpt()) + 1)
For Cnt = 0 To UBound(clmsSpt())
Let Clms(Cnt + 1) = clmsSpt(Cnt)
Next Cnt

Dim Rws() As Variant: Let Rws() = Evaluate("=Row(1:" & CntItms & ")")
Rem 4 Output filtered columns
Dim arrOut() As Variant: Let arrOut() = Application.Index(Cells, Rws(), Clms())
Let Application.EnableEvents = False
Me.Cells.ClearContents
Let Range("A1").Resize(UBound(arrOut(), 1), UBound(arrOut(), 2)).Value = arrOut()
Let Application.EnableEvents = True
End If
End Sub





Extra coding to go in normal code module

Option Explicit
Sub Phillip_Filters()
Dim Ws1 As Worksheet: Set Ws1 = ThisWorkbook.Worksheets("Sheet1")
Dim Lr As Long: Let Lr = Ws1.Range("B" & Rows.Count & "").End(xlUp).Row
Dim Cnt As Long
Let Application.EnableEvents = False
For Cnt = 2 To Lr
Call Sheet1.Worksheet_SelectionChange(Ws1.Range("A" & Cnt & ""))
Next Cnt
Let Application.EnableEvents = True
End Sub

Sub ClearFilers()
Dim Ws1 As Worksheet: Set Ws1 = ThisWorkbook.Worksheets("Sheet1")
Dim Lr As Long: Let Lr = Ws1.Range("B" & Rows.Count & "").End(xlUp).Row
Let Application.EnableEvents = False
Ws1.Range("A2:A" & Lr & "").Validation.Delete
Ws1.Range("A2:A" & Lr & "").ClearContents
Let Application.EnableEvents = True
Worksheets("DataSaladinValagationLists").Cells.ClearContents
End Sub

DocAElstein
02-05-2019, 08:44 PM
Positioning of procedure separation Line in the Visual Basic Development Environment

These are some notes based on a discussion here.. http://www.eileenslounge.com/viewtopic.php?f=30&t=31756
Lisa Green had noticed something strange in how VBA divides procedures.....

It appears that in VBA, that is to say in the Visual Basic Development Environment Window , ( that window seen by hitting Alt+F11 from a spreadsheet ) , the convention has been set to separate procedures by a line extending across the code pane Window.
We see these as appearing as a series of underscores, __________________ , extending across the Visual Basic Development Environment Window



End Sub ' The dividing line appears to us as a line of underscores ____




Usually, if we did write exactly this ' The dividing line appears to us as a line of underscores ____ ' , on that terminating line above , then we would not see those underscores, ____ , as they get hidden in the terminating line:
Hidden_____InDividingLine.JPG : https://imgur.com/7DyP9Om
2142
The above screenshot shows the simplest case of routines with no “space” in between. In that simple case, the position of the dividing line is as expected in between the procedures. The situation is a bit more complicated if there is a separation in between procedures….

Effect of blank lines ( or ‘commented lines ) In Between
Between procedures we may add blank lines or ' comment lines. If this is done, it appears that the convention has been set to place the line somewhere between the procedures in this blank/ ‘comment range, and the lines above the line “belong” to the procedure above, that is to say the last or preeceding procedure, and the lines below the line “belong” to the procedure below, that is to say the next procedure, http://www.eileenslounge.com/viewtopic.php?f=30&t=31756#p245845

The documentation is not 100% clear on how the position of the dividing is determined , that is to say how the row on which it physically appears as a long series of underscores, __________________ is determined
There is no obvious logic to the way in which the dividing line can be positioned, that is to say , how to determine on which the dividing line appears as a long series of underscores, __________________

Some initial experiments suggest that is influenced by positioning of blank lines and any single underscores _

Line continuation / Break points : single underscores _
We note in passing , that single underscores are used in coding generally to allow us to divide a single line of code into several lines for ease of reading. For example:

' http://www.excelfox.com/forum/showthread.php/2293-Move-values-in-rows-at-the-end-of-the-preceding-row-*SOLVED*?p=10891#post10891
Sub LineContunuationUnderscores() ' https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/program-structure/how-to-break-and-combine-statements-in-code
Dim LastRow As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row

' Without line breaks
Range("A1:A" & LastRow) = Evaluate(Replace(Replace("IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)=""2018"",TRIM(A1:A@&"" ""&A2:A#),""""),IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", LastRow + 1), "@", LastRow))

' With Line breaks
LastRow = _
Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:A" & LastRow) = Evaluate(Replace(Replace( _
"IF(ISNUMBER(0+SUBSTITUTE(SUBSTITUTE(" & _
"A2:A#,"" "",""""),"","","""")),IF(LEFT(A1:A@,4)" & _
"=""2018"",TRIM(A1:A@&"" ""&A2:A#),"""")," & _
"IF(LEFT(A1:A@,4)=""2018"",A1:A@,""""))", "#", _
LastRow + 1), "@", LastRow))
' This is _
acceptable in _
or out of a procedure
End Sub
' This is _
acceptable in _
or out of a procedure_________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ _________
Further, we note that the line continuation , sometimes called a line break, _ , also applies to comments whether in a procedure or between procedures:
' This is _
acceptable in _
or out of a procedure

_._________

Determining position of horizontal line dividing procedures when blank or comment lines are between procedures
Sir Narios .
The documentation is not 100% clear on how the position of the dividing is determined , that is to say how the row on which it physically appears as a long series of underscores, __________________ is determined
There is no obvious logic to the way in which the dividing line can be positioned, that is to say , how to determine on which the dividing line appears as a long series of underscores, __________________
Some initial experiments suggest that is influenced by positioning of blank lines and any single underscores _
There appear to be 3 scenarios to consider in order to place the line somewhere in between, ( 4 if you consider the simple case of all lines containing comments or all lines being blank )

Scenario 0
' _(0)
If all lines are blank, or all lines are full with comments ( which exclude line continuations )
No single underscores in any line
The break is immediately after the Last/ upper procedure. (This is the same as the case for no separation between routines )
Scenario 0 .JPG : https://imgur.com/pA4grFL
2143

Sub Scenario_0()
' _(0)
End Sub_______________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ ______


Sub senario_0()
' _(0)
End Sub_______________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ ________________
'
'
'
Sub surnario_0()
' _(0)
End Sub_______________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ ________________________






Scenario 1
' _(i) 2141 SirNario_1.JPG . https://imgur.com/zmr2up2
If no line continuations are present and there is a one or more blank lines, then the line before the first blank line down from the upper routine is taken as the break point.
No single underscores in any line

Sub Senario_1()
' _(i)
End Sub
'
'_________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ _________________________

Sub surnaria_1()
' _(i)
End Sub
'_________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ _____________________________

''

'
Sub Sirnario_1()
' _(i)
End Sub_______________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ __________


'
'
Sub snaria_1()
' _(i)
End Sub


Scenario 2
' _(ii) 2144 SirNario_2.JPG : https://imgur.com/D2LqloV
If there are one or more line continuations present then the break point will be placed at the first blank line down after the last line after the line continuation … unless scenario (iii)

Sub Scnari_2()
' _(ii)
End Sub

''
'
' _

'_________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ _____________________________

'

Sub Sernario_2()
' _(ii)
End Sub
'
'
' _
'
'_________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ ____________________________

'
Sub Sirnarnio_2()
' _(ii)
End Sub

Scenario 3
' _ (iii) 2146 SirNario_3.JPG : https://imgur.com/ho56uBN
There are no blank lines after the first line looking down after the last line continuation looking down, or after the first line looking down after the last line continuation looking down all lines contain comments . In this case, the break is at the line after the line on which the line continuation is on.


Sub scenario_3()
' _(iii)
End Sub
''
' _
__________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ ____________________________
'
'
Sub SirNario_3()
' _(iii)
End Sub

'
' _
'_________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ _____________________________
'
'
Sub snuaro_3()
' _(iii)
End Sub
'

'
' _
__________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ ____________________________





Sub SirNario_3()

End Sub
'
' _
'_________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ _____________________________



Sub SurNario_3()

End Sub

DocAElstein
02-07-2019, 10:50 PM
Rotines for this excelfox Thread
http://www.excelfox.com/forum/showthread.php/2302-quot-What%92s-in-a-String-quot-VBA-break-down-Loop-through-character-contents-of-a-string?p=10943#post10943

This is part 1 of the coding. The second part is in the next post. The second part must be copied directly under this part in the same code module



Option Explicit '
Option Compare Binary ' https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference/statements/option-compare-statement

Sub TestWtchaGot()
' In the practice we would likely have our string obtained from some method and would have it held in some string variable
Dim strTest As String ' "Pointer" to a "Blue Print" (or Form, Questionnaire not yet filled in, a template etc.)"Pigeon Hole" in Memory, sufficient in construction to house a piece of Paper with code text giving the relevant information for the particular Variable Type. VBA is sent to it when it passes it. In a Routine it may be given a particular “Value”, or (“Values” for Objects). There instructions say then how to do that and handle(store) that(those). At Dim the created Paper is like a Blue Print that has some empty spaces not yet filled in. A String is a bit tricky. The Blue Print code line Paper in the Pigeon Hole will allow to note the string Length and an Initial start memory Location. This Location well have to change frequently as strings of different length are assigned. Instructions will tell how to do this. Theoretically a special value vbNullString is set to aid in quick checks.. But..http://www.mrexcel.com/forum/excel-questions/361246-vbnullstring-2.html#post44116
Let strTest = Chr(1) & "Hi" & vbCrLf & vbTab & """u."""
Call WtchaGot(strIn:=strTest)
' Call WtchaGot(Chr(1) & "Hi" & vbCrLf & vbTab & """u.""")
End Sub

Sub WtchaGot(ByVal strIn As String)
Rem 1 ' Output "sheet hardcopies"
'1a) Worksheets 'Make a Temporary Sheet, if not already there, in Current Active Workbook, for a simple list of all characters
If Not Evaluate("=ISREF(" & "'" & "WotchaGotInString" & "'!Z78)") Then ' ( the ' are not important here, but iin general allow for a space in the worksheet name like "Wotcha Got In String"
Dim Wb As Workbook ' ' ' Dim: ' Preparing a "Pointer" to an Initial "Blue Print" in Memory of the Object ( Pigeon Hole with a bit of paper or code lines on that can be filled in to refer to a specific Objec of this type ) . This also us to get easily at the Methods and Properties throught the applying of a period ( .Dot) ( intellisense ) '
Set Wb = ActiveWorkbook ' ' Set now (to Active Workbook - one being "looked at"), so that we carefull allways referrence this so as not to go astray through Excel Guessing inplicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 '
Wb.Worksheets.Add After:=Wb.Worksheets.Item(Worksheets.Count) 'A sheeet is added and will be Active
Dim ws As Worksheet '
Set ws = ActiveSheet 'Rather than rely on always going to the active sheet, we referr to it Explicitly so that we carefull allways referrence this so as not to go astray through Excel Guessing implicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 ' Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191
ws.Activate: ws.Cells(1, 1).Activate ' ws.Activate and activating a cell sometimes seemed to overcome a strange error
Let ws.Name = "WotchaGotInString"
Else ' The worksheet is already there , so I just need to set my variable to point to it
Set ws = ThisWorkbook.Worksheets("WotchaGotInString")
End If
'1b) Array
Dim myLenf As Long: Let myLenf = Len(strIn) ' ' Long is very simple to handle, - final memory "size" type is known (123.456 and 000.001 have same "size" computer memory ) , and so a Address suggestion can be given for the next line when the variable is filled in. '( Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647) If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.--upon/after 32-bit, Integers (Short) need converted internally anyways, so a Long is actually faster. ) https://www.mrexcel.com/forum/excel-questions/803662-byte-backward-loop-4.html
Dim arrWotchaGot() As String: ReDim arrWotchaGot(1 To myLenf + 1, 1 To 2) ' +1 for header Array for the output 2 column list. The type is known and the size, but I must use this ReDim method simply because the dim statement Dim( , ) is complie time thing and will only take actual numbers
Let arrWotchaGot(1, 1) = Format(Now, "DD MMM YYYY") & vbLf & "Lenf is " & myLenf: Let arrWotchaGot(1, 2) = Left(strIn, 20)
Rem 2 String anylaysis
'Dim myLenf As Long: Let myLenf = Len(strIn)
Dim Cnt As Long
For Cnt = 1 To myLenf ' ===Main Loop============================================== ==========================
' Character analysis: Get at each character
Dim Caracter As Variant ' String is probably OK.
Let Caracter = Mid(strIn, Cnt, 1) ' ' the character in strIn at position from the left of length 1
'2a) The character added to a single WotchaGot long character string to look at and possibly use in coding
Dim WotchaGot As String ' This will be used to make a string that I can easilly see and also is in a form that I can copy and paste in a code line required to build the full string of the complete character string
'2a)(i) Most common characters and numbers to be displayed as "seen normally" ' -------2a)(i)--
If Caracter Like "[A-Z]" Or Caracter Like "[0-9]" Or Caracter Like "[a-z]" Then ' Check for normal characters
Let WotchaGot = WotchaGot & """" & Caracter & """" & " & " ' This will give the sort of output that I need to write in a code line, so for example if I have a123 , this code line will be used 4 times and give like a final string for me to copy of "a" & "1" & "2" & "3" & I would phsically need to write in code like strVar = "a" & "1" & "2" & "3" - i could of course also write = "a123" but the point of this routine is to help me pick out each individual element
Else ' Some other things that I would like to "see" normally - not "normal simple character" - or by a VBA constant, like vbCr vbLf vbTab
Select Case Caracter ' 2a)(ii)_1
Case " "
Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case "!"
Let WotchaGot = WotchaGot & """" & "!" & """" & " & "
Case "$"
Let WotchaGot = WotchaGot & """" & "$" & """" & " & "
Case "%"
Let WotchaGot = WotchaGot & """" & "%" & """" & " & "
Case "~"
Let WotchaGot = WotchaGot & """" & "~" & """" & " & "
Case "&"
Let WotchaGot = WotchaGot & """" & "&" & """" & " & "
Case "("
Let WotchaGot = WotchaGot & """" & "(" & """" & " & "
Case ")"
Let WotchaGot = WotchaGot & """" & ")" & """" & " & "
Case "/"
Let WotchaGot = WotchaGot & """" & "/" & """" & " & "
Case "\"
Let WotchaGot = WotchaGot & """" & "\" & """" & " & "
Case "="
Let WotchaGot = WotchaGot & """" & "=" & """" & " & "
Case "?"
Let WotchaGot = WotchaGot & """" & "?" & """" & " & "
Case "'"
Let WotchaGot = WotchaGot & """" & "'" & """" & " & "
Case "+"
Let WotchaGot = WotchaGot & """" & "+" & """" & " & "
Case "-"
Let WotchaGot = WotchaGot & """" & "-" & """" & " & "
Case "_"
Let WotchaGot = WotchaGot & """" & "_" & """" & " & "
Case "."
Let WotchaGot = WotchaGot & """" & "." & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "

DocAElstein
02-07-2019, 10:52 PM
This is the second part of the coding from the last post

This should be copied and pasted directly under the coding from the last post



' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' ' 2a)(ii)_2
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case vbCr
Let WotchaGot = WotchaGot & "vbCr & " ' I actuall would write manually in this case like vbCr &
Case vbLf
Let WotchaGot = WotchaGot & "vbLf & "
Case vbCrLf
Let WotchaGot = WotchaGot & "vbCrLf & "
Case """" ' This is how to get a single " No one is quite sure how this works. My theory that, is as good as any other, is that syntaxly """" or " """ or """ " are accepted. But in that the """ bit is somewhat strange for VBA. It seems to match the first and Third " together as a valid pair but the other " in the middle of the 3 "s is also syntax OK, and does not error as """ would because of the final 4th " which it syntaxly sees as a valid pair matched simultaneously as it does some similar check on the first and Third as a concluding string pair. All is well except that the second " is captured within a accepted enclosing pair made up of the first and third " At the same time the 4th " is accepted as a final concluding " paired with the second which it is using but at the same time now isolated from.
Let WotchaGot = WotchaGot & """" & """" & """" & """" & " & " ' The reason why "" "" would not work is that at the end of the "" the next empty character signalises the end of a string pair, and only if it saw a " would it keep checking the syntax rules which then lead in the previous case to the situation described above.
Case vbTab
Let WotchaGot = WotchaGot & "vbTab & "
' 2a)(iii)
Case Else
WotchaGot = WotchaGot & "Chr(" & Asc(Caracter) & ")" & " & "
'Let CaseElse = Caracter
End Select
End If ' End of the "normal simple character" or not ' -------2a)------Ended-----------
'2b) A 2 column Array for convenience of a list
Let arrWotchaGot(Cnt + 1, 1) = Cnt & " " & Caracter: Let arrWotchaGot(Cnt + 1, 2) = Asc(Caracter) ' +1 for header
Next Cnt ' ========Main Loop============================================== ===================================
If WotchaGot <> "" Then Let WotchaGot = Left(WotchaGot, Len(WotchaGot) - 3) ' take off last " & " ( 2 spaces one either side of a & )
Rem 3 Output
'3a) String
MsgBox prompt:=WotchaGot: Debug.Print WotchaGot ' Hit Ctrl+g from the VB Editor to get a copyable version of the entire string
'3b) List
Dim NxtClm As Long: Let NxtClm = 1 ' In conjunction with next If this prevents the first column beine taken as 0 for an empty worksheet
If Not ws.Range("A1").Value = "" Then Let NxtClm = ws.Cells.Item(1, Columns.Count).End(xlToLeft).Column + 1
Let ws.Cells.Item(1, NxtClm).Resize(UBound(arrWotchaGot(), 1), UBound(arrWotchaGot(), 2)).Value = arrWotchaGot()
End Sub
'

DocAElstein
02-18-2019, 02:51 PM
Coding in support of this excelfox Thread:
llkslksjjsjfaslkjflkajflkjflfjj later sajfsladj




Option Explicit


'
' Range.Sort Example
Sub RangeSortExample()
range("G13:K19").Sort Key1:=range("G13:K19").Columns("B:B"), Order1:=xlAscending, Key2:=range("G13:K19").Columns("D:D"), order2:=xlAscending, MatchCase:=False, Key3:=range("G13:K19").Columns("E:E"), order3:=xlDescending, MatchCase:=False
End Sub ' Matchcase:=False '




' Simplist Sort
Sub SimpleArraySort()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As range: Set RngToSort = WsS.range("A2:B9")
' alternative:
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Dim arrOut() As Variant: Let arrOut() = arrTS() ' could simply use the original array and sort that
' column to be used for determining order of rows sorted array: the values in this column will be looked at
Dim Clm As Long: Let Clm = 1
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = 1 To UBound(arrTS(), 1) - 1 ' For row 1 to the (last row -1) last row, given by the first dimension upper limit of the array
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To UBound(arrOut(), 1)
'If arrOut(rOuter, Clm) > arrOut(rInner, Clm) Then ' This means that I am bigger than the next. So I will swap . I keep doing this which will have the effect of putting the smallest in the current rOuter. By the this and all next rOuter, I miss out the last, and any previous, which means I effectively do the same which puts the next smallest in this next rOuter.
If UCase(CStr(arrOut(rOuter, Clm))) > UCase(CStr(arrOut(rInner, Clm))) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let Temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
Rem 2 Output for easy of demo
RngToSort.Offset(0, RngToSort.Columns.Count).Clear ' WsS.Columns("C:D").Clear ' CHANGE TO SUIT
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrOut
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
End Sub
' Approximate equivalent to the above routune, using VBA Range.Sort Method ' https://docs.microsoft.com/de-de/office/vba/api/excel.range.sort
Sub Range_Sort()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As range: Set RngToSort = WsS.range("A2:B9")
' alternative:
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Rem 1 For demo purposes we will sort a copy of the range
RngToSort.Offset(0, RngToSort.Columns.Count * 2).Clear ' WsS.Columns("E:F").Clear ' CHANGE TO SUIT
RngToSort.Copy Destination:=RngToSort.Offset(0, RngToSort.Columns.Count * 2)
Dim RngCopy As range: Set RngCopy = RngToSort.Offset(0, RngToSort.Columns.Count * 2)
RngCopy.Sort Key1:=RngCopy.Columns("A:A"), Order1:=xlAscending, MatchCase:=False
'
Let RngCopy.Interior.Color = vbGreen
End Sub




Typical results:
The sorted array is displayed in the spreadsheet along side the original range used as test data for the inputted array. ( The yellow highlighted range is that produced by the array sort routine, Sub SimpleArraySort() , and the green highlighted range is that produced by the VBA Range.Sort method routine, Sub Range_Sort()
More examples in next post.

_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G

1


2cWasB2AWasB5AWasB5


3ABWasB3AaWasB4AaWasB4


4AaWasB4ABWasB3ABWasB3


5AWasB5BWasB7BWasB7


6CWasB6bWasB8bWasB8


7BWasB7bcdeWasB9bcdeWasB9


8bWasB8CWasB6cWasB2


9bcdeWasB9cWasB2CWasB6


10
Worksheet: Sorting

DocAElstein
02-18-2019, 02:58 PM
Further Examples using the routines from the previous post
The sorted array is displayed in the spreadsheet along side the original range used as test data for the inputted array. ( The yellow highlighted range is that produced by the array sort routine, Sub SimpleArraySort() , and the green highlighted range is that produced by the VBA Range.Sort method routine, Sub Range_Sort()

_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G

1


2cWasB2
32WasB8
6WasB7


3ABWasB3
6WasB7
32WasB8


4AaWasB4AWasB5AWasB5


5AWasB5AaWasB4AaWasB4


6CWasB6ABWasB3ABWasB3


7
6WasB7bcdeWasB9bcdeWasB9


8
32WasB8CWasB6cWasB2


9bcdeWasB9cWasB2CWasB6


10
Worksheet: Sorting

To reverse this to descending so that things “get smaller as you go down the rows”, you simply need to change
the > to a < in the array routine
and
the Order1:=xlAscending to Order1:=xlDescending in the VBA Range.Sort routine
_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G

1


2cWasB2cWasB2cWasB2


3ABWasB3CWasB6CWasB6


4AaWasB4bcdeWasB9bcdeWasB9


5AWasB5ABWasB3ABWasB3


6CWasB6AaWasB4AaWasB4


7
6WasB7AWasB5AWasB5


8
32WasB8
6WasB7
32WasB8


9bcdeWasB9
32WasB8
6WasB7


10
Worksheet: Sorting


I intended developing the solution into a function, so as a start to this, the routine will be modified to take an Optional argument of 0 or 1 , with the default of 0 being the case for an Ascending list. I am not being particularly efficient with the coding, and will duplicate sections.

A full routine is posted in the next post

DocAElstein
02-19-2019, 10:52 PM
The last routine, Sub TestieSimpleArraySort(), has a section dupilcated to allow for selection of a final list sorted in Ascending or descending order.
If supplied 0, or , no GlLl argument is given, then the final list should be sorted in Ascending order



' Simplist Sort2
Sub TestieSimpleArraySort2()
Call SimpleArraySort2(0)
End Sub
'
Sub SimpleArraySort2(Optional ByVal GlLl As Long)
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As range: Set RngToSort = WsS.range("A2:B9")
' alternative:
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Dim arrOut() As Variant: Let arrOut() = arrTS() ' could simply use the original array and sort that
' column to be used for determining order of rows sorted array: the values in this column will be looked at
Dim Clm As Long: Let Clm = 1
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = 1 To UBound(arrTS(), 1) - 1 ' For row 1 to the (last row -1) last row, given by the first dimension upper limit of the array
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To UBound(arrOut(), 1)
'If arrOut(rOuter, Clm) > arrOut(rInner, Clm) Then ' This means that I am bigger than the next. So I will swap . I keep doing this which will have the effect of putting the smallest in the current rOuter. By the this and all next rOuter, I miss out the last, and any previous, which means I effectively do the same which puts the next smallest in this next rOuter.
If GlLl = 0 Then ' We want Ascending list
'If UCase(CStr(arrOut(rOuter, Clm))) > UCase(CStr(arrOut(rInner, Clm))) Then
If UCase(CStr(arrOut(rOuter, Clm))) > UCase(CStr(arrOut(rInner, Clm))) Then
Dim temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' GlLl is not 0 , so presumably we want Descending list
If UCase(CStr(arrOut(rOuter, Clm))) < UCase(CStr(arrOut(rInner, Clm))) Then
'Dim temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
'Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
Rem 2 Output for easy of demo
RngToSort.Offset(0, RngToSort.Columns.Count).Clear ' WsS.Columns("C:D").Clear ' CHANGE TO SUIT
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrOut()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
End Sub



Results for this callind procedure

Sub TestieSimpleArraySort2()
Call SimpleArraySort2(0)
Call SimpleArraySort
End Sub
'
_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

2cWasB2
32WasB8


3ABWasB3
6WasB7


4AaWasB4AWasB5


5AWasB5AaWasB4


6CWasB6ABWasB3


7
6WasB7bcdeWasB9


8
32WasB8CWasB6


9bcdeWasB9cWasB2
Worksheet: Sorting


Results for this calling procedure

Sub TestieSimpleArraySort2()
Call SimpleArraySort2(732847)
End Sub
'
_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

2cWasB2cWasB2


3ABWasB3CWasB6


4AaWasB4bcdeWasB9


5AWasB5ABWasB3


6CWasB6AaWasB4


7
6WasB7AWasB5


8
32WasB8
6WasB7


9bcdeWasB9
32WasB8
Worksheet: Sorting

DocAElstein
02-19-2019, 11:55 PM
A further modification is done to the previous routines so that values that can be seen as numbers are compared as numbers in sorting. This is done so that, for example, a number like 46 would be seen as greater than 7. In previous routines, these would be compared as text values of "46" and "7". In a text comparison, the sort is done initially on the first character so that "4" would be seen as less that "7". ( The second character, "6", in this exampple is not used. A second character would only be used to sort if we had two values such as "46" and "49". In such an example VBA would place "49" above "46" for a text comparison

We find that the VBA Range.Sort Method sees text as text and numbers typically as numbers , and the final purpose of the routines we are developing in the associated main forum Thread is to do somethhing similar to the VBA Range.Sort Method


'
' Simplist Sort3
Sub TestieSimpleArraySort3()
Call SimpleArraySort3(0)
End Sub
'
Sub SimpleArraySort3(Optional ByVal GlLl As Long)
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As range: Set RngToSort = WsS.range("A2:B9")
' alternative:
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Dim arrOut() As Variant: Let arrOut() = arrTS() ' could simply use the original array and sort that
' column to be used for determining order of rows sorted array: the values in this column will be looked at
Dim Clm As Long: Let Clm = 1
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = 1 To UBound(arrTS(), 1) - 1 ' For row 1 to the (last row -1) last row, given by the first dimension upper limit of the array
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To UBound(arrOut(), 1)
'If arrOut(rOuter, Clm) > arrOut(rInner, Clm) Then ' This means that I am bigger than the next. So I will swap . I keep doing this which will have the effect of putting the smallest in the current rOuter. By the this and all next rOuter, I miss out the last, and any previous, which means I effectively do the same which puts the next smallest in this next rOuter.
If GlLl = 0 Then ' We want Ascending list
If IsNumeric(arrOut(rOuter, Clm)) And IsNumeric(arrOut(rInner, Clm)) Then ' Numeric case
'If UCase(CStr(arrOut(rOuter, Clm))) > UCase(CStr(arrOut(rInner, Clm))) Then
'If arrOut(rOuter, Clm) > arrOut(rInner, Clm) Then' If both values are seen to be numeric then this line would probably work, but as "belt and braces" we do the next
If CDbl(arrOut(rOuter, Clm)) > CDbl(arrOut(rInner, Clm)) Then
Dim temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' Non numeric case
'If UCase(CStr(arrOut(rOuter, Clm))) > UCase(CStr(arrOut(rInner, Clm))) Then
If UCase(CStr(arrOut(rOuter, Clm))) > UCase(CStr(arrOut(rInner, Clm))) Then
'Dim temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
'Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
Else ' GlLl is not 0 , so presumably we want Descending list
If IsNumeric(arrOut(rOuter, Clm)) And IsNumeric(arrOut(rInner, Clm)) Then
If CDbl(arrOut(rOuter, Clm)) < CDbl(arrOut(rInner, Clm)) Then
'Dim temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
'Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' non numeric case
If UCase(CStr(arrOut(rOuter, Clm))) < UCase(CStr(arrOut(rInner, Clm))) Then
'Dim temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
'Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
Rem 2 Output for easy of demo
RngToSort.Offset(0, RngToSort.Columns.Count).Clear ' WsS.Columns("C:D").Clear ' CHANGE TO SUIT
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrOut()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
End Sub


Final comparison results are shown in the next post

DocAElstein
02-20-2019, 12:12 AM
The sorted array is displayed in the spreadsheet along side the original range used as test data for the inputted array. ( The yellow highlighted range is that produced by the array sort routine, Sub SimpleArraySort3() , and the green highlighted range is that produced by the VBA Range.Sort method routine, Sub Range_Sort()


Ascending Order

Sub TestieSimpleArraySort3()
Call SimpleArraySort3(0)
End Sub
'

Sub Range_Sort()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As range: Set RngToSort = WsS.range("A2:B9")
' alternative:
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Rem 1 For demo purposes we will sort a copy of the range
RngToSort.Offset(0, RngToSort.Columns.Count * 2).Clear ' WsS.Columns("E:F").Clear ' CHANGE TO SUIT
RngToSort.Copy Destination:=RngToSort.Offset(0, RngToSort.Columns.Count * 2)
Dim RngCopy As range: Set RngCopy = RngToSort.Offset(0, RngToSort.Columns.Count * 2)
RngCopy.Sort Key1:=RngCopy.Columns("A:A"), Order1:=xlAscending, MatchCase:=False
'RngCopy.Sort Key1:=RngCopy.Columns("A:A"), Order1:=xlDescending, MatchCase:=False
Let RngCopy.Interior.Color = vbGreen
End Sub
_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G

1


2cWasB2
6WasB7
6WasB7


3ABWasB3
32WasB8
32WasB8


4AaWasB4AWasB5AWasB5


5AWasB5AaWasB4AaWasB4


6CWasB6ABWasB3ABWasB3


7
6WasB7bcdeWasB9bcdeWasB9


8
32WasB8CWasB6cWasB2


9bcdeWasB9cWasB2CWasB6


10
Worksheet: Sorting



Descending Order

Sub TestieSimpleArraySort3()
Call SimpleArraySort3(2246)
End Sub
'

Sub Range_Sort()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As range: Set RngToSort = WsS.range("A2:B9")
' alternative:
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Rem 1 For demo purposes we will sort a copy of the range
RngToSort.Offset(0, RngToSort.Columns.Count * 2).Clear ' WsS.Columns("E:F").Clear ' CHANGE TO SUIT
RngToSort.Copy Destination:=RngToSort.Offset(0, RngToSort.Columns.Count * 2)
Dim RngCopy As range: Set RngCopy = RngToSort.Offset(0, RngToSort.Columns.Count * 2)
'RngCopy.Sort Key1:=RngCopy.Columns("A:A"), Order1:=xlAscending, MatchCase:=False
RngCopy.Sort Key1:=RngCopy.Columns("A:A"), Order1:=xlDescending, MatchCase:=False
Let RngCopy.Interior.Color = vbGreen
End Sub
_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G

1


2cWasB2cWasB2cWasB2


3ABWasB3CWasB6CWasB6


4AaWasB4bcdeWasB9bcdeWasB9


5AWasB5ABWasB3ABWasB3


6CWasB6AaWasB4AaWasB4


7
6WasB7AWasB5AWasB5


8
32WasB8
32WasB8
32WasB8


9bcdeWasB9
6WasB7
6WasB7


10
Worksheet: Sorting

DocAElstein
02-20-2019, 10:28 PM
'
Sub TestieSimpleArraySort4()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As Range: Set RngToSort = WsS.Range("A2:B9")
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Call SimpleArraySort4(arrTS(), 0)
End Sub


Sub SimpleArraySort4(ByRef arrTS() As Variant, Optional ByVal GlLl As Long)
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As Range: Set RngToSort = WsS.Range("A2:B9")
' alternative:
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
' Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Dim arrOut() As Variant: Let arrOut() = arrTS() ' could simply use the original array and sort that
' column to be used for determining order of rows sorted array: the values in this column will be looked at
Dim Clm As Long: Let Clm = 1
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = 1 To UBound(arrTS(), 1) - 1 ' For row 1 to the (last row -1) last row, given by the first dimension upper limit of the array
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To UBound(arrOut(), 1)
If GlLl = 0 Then ' We want Ascending list
If IsNumeric(arrOut(rOuter, Clm)) And IsNumeric(arrOut(rInner, Clm)) Then ' Numeric case
If CDbl(arrOut(rOuter, Clm)) > CDbl(arrOut(rInner, Clm)) Then
Dim temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' Non numeric case
If UCase(CStr(arrOut(rOuter, Clm))) > UCase(CStr(arrOut(rInner, Clm))) Then
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
Else ' GlLl is not 0 , so presumably we want Descending list
If IsNumeric(arrOut(rOuter, Clm)) And IsNumeric(arrOut(rInner, Clm)) Then
If CDbl(arrOut(rOuter, Clm)) < CDbl(arrOut(rInner, Clm)) Then
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' non numeric case
If UCase(CStr(arrOut(rOuter, Clm))) < UCase(CStr(arrOut(rInner, Clm))) Then
For Clms = 1 To UBound(arrOut(), 2)
Let temp = arrOut(rOuter, Clms): Let arrOut(rOuter, Clms) = arrOut(rInner, Clms): Let arrOut(rInner, Clms) = temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
Rem 2 Output for easy of demo
RngToSort.Offset(0, RngToSort.Columns.Count).Clear
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrOut()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
End Sub

DocAElstein
02-21-2019, 01:15 PM
Because we are using ByRef , the previous testieing Calling routine can also use the original supplied array, arrTS() , after the main procedure Call , provided that the array taken in at the signature line is that sorted, as that will in effect be the same array and it will reflect the changes done to it.

Pseudo code ByRef ‘ ( Usually default option )
varMyArray = x
_ Call ReferToIt(varMyArray)
Sub ReferToIt(ByRef arr)
_ arr=y ‘ This is similar to saying varMyArray = y
End
varMyArray is now = y ‘ because effectively varMyArray was in arr


'
Sub TestieSimpleArraySort4b()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As Range: Set RngToSort = WsS.Range("A2:B9")
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Call SimpleArraySort4b(arrTS(), 0)
Rem 2 Output for easy of demo
RngToSort.Offset(0, RngToSort.Columns.Count).Clear
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrTS()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
End Sub

Sub SimpleArraySort4b(ByRef arsRef() As Variant, Optional ByVal GlLl As Long)
' column to be used for determining order of rows sorted array: the values in this column will be looked at
Dim Clm As Long: Let Clm = 1
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = 1 To UBound(arsRef(), 1) - 1 ' For row 1 to the (last row -1) last row, given by the first dimension upper limit of the array
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To UBound(arsRef(), 1)
If GlLl = 0 Then ' We want Ascending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then ' Numeric case
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' Non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) > UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
Else ' GlLl is not 0 , so presumably we want Descending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then
If CDbl(arsRef(rOuter, Clm)) < CDbl(arsRef(rInner, Clm)) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) < UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
End Sub

DocAElstein
02-21-2019, 05:24 PM
In the routines
Sub TestieSimpleArraySort5() and Function SimpleArraySort5(______) As Variant
below , the main difference over the previous routines is the extra As Variant at the signature line, and finally a code line just before End Function of SimpleArraySort5 = arsRef()

In the testieing routine, we use codes line of this form in the conventional way in which a function is typically used.
_ arrTS() = SimpleArraySort5(arrTS(), _ 0 _ )
But we note that by virtue of using ByRef a simple call would surfice
_Call SimpleArraySort5(arrTS(), _ 0 _ )

Note: we have added an extra testing code section '2b)
In this extra section we fill a new array, arrDesc() , with the sorted array in Descending order. We use for demo purposes a typical function using code line
_ arrDesc() = SimpleArraySort5(arrTS(), 2136)
Correspondingly we have a demo output giving code line
_ RngToSort.Offset(0, RngToSort.Columns.Count * 3).Value = arrDesc()

We note further, that this is somewhat redundant. This is because the code part SimpleArraySort5(arrTS(), 2136) has the effect of re filling arrTS() with the newly sorted array by virtue of the use of ByRef in the signature line of the Function
We could therefore simply use a code line like _..
_Call SimpleArraySort5(arrTS(), 357)
_.. followed by an demo output giving line of
_ RngToSort.Offset(0, RngToSort.Columns.Count * 3).Value = arrTS()




Sub TestieSimpleArraySort5()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As Range: Set RngToSort = WsS.Range("A2:B9")
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Call SimpleArraySort5(arrTS(), 0)
Let arrTS() = SimpleArraySort5(arrTS(), 0)
Rem 2 Output for easy of demo
' 2a) Ascending
RngToSort.Offset(0, RngToSort.Columns.Count).Clear
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrTS()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
' 2b) Descending ( using diiffernet variable )
Dim arrDesc() As Variant
Let arrDesc() = SimpleArraySort5(arrTS(), 2136)
RngToSort.Offset(0, RngToSort.Columns.Count * 3).Clear
Let RngToSort.Offset(0, RngToSort.Columns.Count * 3).Value = arrDesc()
Let RngToSort.Offset(0, RngToSort.Columns.Count * 3).Value = arrTS() ' Because we use ByRef this would work after any normal Call of SimpleArraySort5(arrTS(), ) The actual call we use puts the sorted array in arrTS() The important bit is SimpleArraySort5(arrTS(), ) After this arrTS() with the newly sorted array by virtue of the use of ByRe in the signature line of this Function has the effect of refilling arrTS() with the newly sorted in descending order values
Let RngToSort.Offset(0, RngToSort.Columns.Count * 3).Interior.Color = vbYellow
End Sub

Function SimpleArraySort5(ByRef arsRef() As Variant, Optional ByVal GlLl As Long) As Variant
' column to be used for determining order of rows sorted array: the values in this column will be looked at
Dim Clm As Long: Let Clm = 1
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = 1 To UBound(arsRef(), 1) - 1 ' For row 1 to the (last row -1) last row, given by the first dimension upper limit of the array
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To UBound(arsRef(), 1)
If GlLl = 0 Then ' We want Ascending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then ' Numeric case
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' Non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) > UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
Else ' GlLl is not 0 , so presumably we want Descending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then
If CDbl(arsRef(rOuter, Clm)) < CDbl(arsRef(rInner, Clm)) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) < UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
Let SimpleArraySort5 = arsRef()
End Function


In the next post are some typical test results for the above coding

DocAElstein
02-21-2019, 05:47 PM
Some typical resullts using the coding from the last post

Consider this test input range

_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1


2cWasB2


3ABWasB3


4AaWasB4


5AWasB5


6CWasB6


7
6WasB7


8
32WasB8


9bcdeWasB9


10
Worksheet: Sorting




After running Sub TestieSimpleArraySort5() , you should see this:

_____ ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I

1


2cWasB2
6WasB7CWasB6


3ABWasB3
32WasB8cWasB2


4AaWasB4AWasB5bcdeWasB9


5AWasB5AaWasB4ABWasB3


6CWasB6ABWasB3AaWasB4


7
6WasB7bcdeWasB9AWasB5


8
32WasB8CWasB6
32WasB8


9bcdeWasB9cWasB2
6WasB7


10
Worksheet: Sorting

DocAElstein
02-22-2019, 06:20 PM
Take an example,
A list of Foods, their name in first column and a few other things like calories(Kcal) and Salt content in other columns

First I want to sort to group similar products (based on alphabetical order, but ascending or descending is not important) - This will be sorting on column 1 values

Within similar food types, I want to list them in an order of how healthy they might be, ( or at least in the order of least unhealthy ) .
Most important would be order starting with lowest Kcal.
After that for similar products with similar Kcal , we would consider the minimum salt content as likely to be the less unhealthy.

This might be our list
_____ ( Using Excel 2007 32 bit )
Row\Col
R
S
T
U
V
W

22Food ProductWas S22KcalWas U22SaltWas W22


23CrispsWas S23
500Was U23
0.7Was W23


24Beer Was S24
200Was U24
0.1Was W24


25WineWas S25
150Was U25
0.15Was W25


26BeerWas S26
200Was U26
0.07Was W26


27beerWas S27
220Was U27
0.2Was W27


28BeerWas S28
210Was U28
0.06Was W28


29WineWas S29
160Was U29
0.04Was W29


30wiNeWas S30
150Was U30
0.03Was W30


31CrispsWas S31
502Was U31
2Was W31


32Onion RingesWas S32
480Was U32
1Was W32


33Onion RingesWas S33
490Was U33
1.5Was W33


34CrispsWas S34
502Was U34
1.5Was W34


35CRISPSWas S35
500Was U35
1.1Was W35


36WineWas S36
170Was U36
0.1Was W36


37CrispsWas S37
500Was U37
3Was W37
Worksheet: Sorting


Here is a demo Calling test routine


Sub TestieSimpleArraySort6()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As Range: Set RngToSort = WsS.Range("R23:W37")
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
' Call SimpleArraySort6(1, arrTS(), " 1 2 3 4 5 ", " 1 Asc 2 Asc 3 Asc")
Dim cnt As Long, strIndcs As String: Let strIndcs = " "
For cnt = 1 To RngToSort.Rows.Count
Let strIndcs = strIndcs & cnt & " "
Next cnt
Debug.Print strIndcs ' For 5 rows , for example we will have " 1 2 3 4 5 " , for 15 rows " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 "
Call SimpleArraySort6(1, arrTS(), strIndcs, " 1 Desc 3 Asc 5 Asc")
Rem 2 Output for easy of demo
' 2a
RngToSort.Offset(0, RngToSort.Columns.Count).Clear
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrTS()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
' 2b VBA Range.Sort Method equivalent
Dim TestRngSrt As Range: Set TestRngSrt = RngToSort.Offset(0, RngToSort.Columns.Count * 2)
TestRngSrt.Clear
Let TestRngSrt.Value = RngToSort.Value
TestRngSrt.Sort Key1:=TestRngSrt.Columns("A:A"), order1:=xlDescending, Key2:=TestRngSrt.Columns("C:C"), order2:=xlAscending, Key3:=TestRngSrt.Columns("E:E"), order3:=xlAscending
TestRngSrt.Interior.Color = vbGreen
End Sub
'

That above routine uses the test range R23:W37 above and feeds that to the main recursion routine below in the next post. The demo routine also does the VBA Range.Sort equivalent code line

DocAElstein
02-22-2019, 06:56 PM
'
' Main recursion routine below : Bubble Sorting in Arrays using multi columns values for sort criteria
Sub SimpleArraySort6(ByVal CpyNo As Long, ByRef arsRef() As Variant, ByVal strRws As String, ByVal strKeys As String)
Dim CopyNo As Long: Let CopyNo = CpyNo ' On every recurssion run this will be increased by the Rec Call. This will be a local variable indicating the level down in recursion - I increase it by 1 at every Rec Call, that is to say each Rec Call gets given CopyNo+1 - during a long tunnel down, the number at this pint will keep increasing to reflect how far down we are
If CopyNo = 1 Then Debug.Print "First procedure Call"
Rem -1 from the supplied arguments, get all data needed in current bubble sort
' Column for this level sort , and Ascending or Descending - both determined from the supplied forth arguments and the column/ copy number
Dim Keys() As String: Let Keys() = Split(Replace(Trim(strKeys), " ", " ", 1, -1, vbBinaryCompare), " ", -1, vbBinaryCompare) '' The extra replace allows for me seperating with one or two spaces - the following would do if I only used one space always Split(Trim(strKeys), " ", -1, vbBinaryCompare) ' this will be an array twice as big as the number of keys that we have
If (2 * CopyNo) > UBound(Keys()) + 1 Then MsgBox Prompt:="You need more than " & (UBound(Keys()) + 1) / 2 & " keys to complete sort": Exit Sub ' case we have less keys then we need to sort, are array has twice as many elements as we have supplied keys since we have a key and whether it needs to get bigger or smaller , and array is from 0 so must add 1 to ubound then half it get the key number we gave. We come here if the last column we gave as a Key had duplicates in it
Dim GlLl As Long: If Keys((CopyNo * 2) - 1) = "Desc" Then Let GlLl = 1 ' (CopyNo * 2) - 1) gives as we go down levels 1 3 5 7 etc We're seeing if we had Desc for this column
Dim Clm As Long: Let Clm = CLng(Keys((CopyNo * 2) - 2)) ' ' (CopyNo * 2) - 2) gives as we go down levels 0 2 4 6 etc We are picking out the supplied column to sort by for each level
' making an array from the " 3 4 5 6 " string is just for convenience later of getting the upper and lower row numbers
Dim Rws() As String: Let Rws() = Split(Trim(strRws), " ", -1, vbBinaryCompare) ' We take the supplied sequential string 2 3 4 5 6 and make a 1 D array {1, 2, 3....} as it is a bit more conveniant to work with. Actually we only need the start and top numbers so we could do it with stinr manipulation instead
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = Rws(LBound(Rws())) To Rws(UBound(Rws()) - 1) ' For first row indicie to last but one row indicie
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To Rws(UBound(Rws())) ' from just above left hand through all the rest
If GlLl = 0 Then ' We want Ascending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then ' Numeric case
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' Non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) > UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
Else ' GlLl is not 0 , so presumably we want Descending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then
If CDbl(arsRef(rOuter, Clm)) < CDbl(arsRef(rInner, Clm)) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Else ' non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) < UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
End If ' End of numeric or text comparison
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
' Captains Blog, just fo info
Debug.Print " Running Copy " & CopyNo & " of routine." & vbCr & vbLf & " Sorted rows " & strRws & " based on values in column " & Clm & vbCr & vbLf & " Checking now for Dups in that last sorted list" & vbCr & vbLf
' Rem 3 Determine any duplicates in sort column values , and re run the routine to sort them by another column
Let rOuter = Rws(LBound(Rws())) - 1 ' we look for duplicates in the current list, in the loop below we add 1 each time so _ it is necersarry to start 1 before, so that +1 the first time is the start row
Let strRws = "" ' ready for use in duplicate search
Do ' Loop down the last set of sorted rows ************************************************** **|
Let rOuter = rOuter + 1 ' next row number _ it was necersarry to start 1 before, so that +1 the first time is the start row
If strRws = "" Or Trim(strRws) = rOuter - 1 Then Let strRws = " " & rOuter & " " ' case starting again to get duplicates
If Trim(UCase(CStr(arsRef(rOuter, Clm)))) = Trim(UCase(CStr(arsRef(rOuter + 1, Clm)))) Then ' case in duplicate rows
Let strRws = strRws & rOuter + 1 & " " ' we building a list like " 4 5 6 " based on if the next is a duplicate value, which is determined by the last line
Else ' when we did not have a next duplicate, we may have a few already grouped
If Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case we have at least 2 duplicates but have hit end of that list
Debug.Print "Found dups in last list column " & Clm & ", " & strRws & " , so now Rec Call 1" ' This is done for every duplicated value section, except if we have duplicates at the last lines
Call SimpleArraySort6(CopyNo + 1, arsRef(), strRws, strKeys) ' Rec Call 1 I need to sort the last duplicates
Let strRws = "" ' ready to try for another set of duplicates
Else
End If
End If ' this is the end of the stuff in most situations...
' ...below section catches rows at the end that might need to be sorted. ......|
If rOuter = UBound(arsRef(), 1) - 1 And Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case of duplicates in last row
Debug.Print "Found dups in last list, so now Rec Call 2 (Dups at list end case)" ' Rec Call 2 - only done for duplicates at end of list
Call SimpleArraySort6(CopyNo + 1, arsRef(), strRws, strKeys)
Else
End If '... .................................................. ..............|
Loop While rOuter <> Rws(UBound(Rws()) - 1) ' keep looking for Duplicates in next row**********|
End Sub


Typical results in the next post:

DocAElstein
02-22-2019, 08:23 PM
Typical results using coding from last two posts

_____ ( Using Excel 2007 32 bit )
Row\Col
Q
R
S
T
U
V
W
X
Y
Z
AA
AB
AC
AD
AE
AF
AG
AH
AI
AJ

21


22Food ProductWas S22KcalWas U22SaltWas W22


23CrispsWas S23
500Was U23
0.7Was W23wiNeWas S30
150Was U30
0.03Was W30wiNeWas S30
150Was U30
0.03Was W30


24Beer Was S24
200Was U24
0.1Was W24WineWas S25
150Was U25
0.15Was W25WineWas S25
150Was U25
0.15Was W25


25WineWas S25
150Was U25
0.15Was W25WineWas S29
160Was U29
0.04Was W29WineWas S29
160Was U29
0.04Was W29


26BeerWas S26
200Was U26
0.07Was W26WineWas S36
170Was U36
0.1Was W36WineWas S36
170Was U36
0.1Was W36


27beerWas S27
220Was U27
0.2Was W27Onion RingesWas S32
480Was U32
1Was W32Onion RingesWas S32
480Was U32
1Was W32


28BeerWas S28
210Was U28
0.06Was W28Onion RingesWas S33
490Was U33
1.5Was W33Onion RingesWas S33
490Was U33
1.5Was W33


29WineWas S29
160Was U29
0.04Was W29CrispsWas S23
500Was U23
0.7Was W23CrispsWas S23
500Was U23
0.7Was W23


30wiNeWas S30
150Was U30
0.03Was W30CRISPSWas S35
500Was U35
1.1Was W35CRISPSWas S35
500Was U35
1.1Was W35


31CrispsWas S31
502Was U31
2Was W31CrispsWas S37
500Was U37
3Was W37CrispsWas S37
500Was U37
3Was W37


32Onion RingesWas S32
480Was U32
1Was W32CrispsWas S34
502Was U34
1.5Was W34CrispsWas S34
502Was U34
1.5Was W34


33Onion RingesWas S33
490Was U33
1.5Was W33CrispsWas S31
502Was U31
2Was W31CrispsWas S31
502Was U31
2Was W31


34CrispsWas S34
502Was U34
1.5Was W34BeerWas S26
200Was U26
0.07Was W26Beer Was S24
200Was U24
0.1Was W24


35CRISPSWas S35
500Was U35
1.1Was W35Beer Was S24
200Was U24
0.1Was W24BeerWas S26
200Was U26
0.07Was W26


36WineWas S36
170Was U36
0.1Was W36BeerWas S28
210Was U28
0.06Was W28BeerWas S28
210Was U28
0.06Was W28


37CrispsWas S37
500Was U37
3Was W37beerWas S27
220Was U27
0.2Was W27beerWas S27
220Was U27
0.2Was W27


38
Worksheet: Sorting

DocAElstein
03-02-2019, 10:44 PM
Code in support of these Threads:


http://www.excelfox.com/forum/showthread.php/2240-VBA-referring-to-external-shared-Libraries-1)-Early-1-5)-Laterly-Early-and-2)-Late-Binding-Techniques?p=11018#post11018
http://www.eileenslounge.com/viewtopic.php?f=30&t=31849
https://stackoverflow.com/questions/25091571/strange-behavior-from-vba-dataobject-gettext-returns-what-is-currently-on-the-c
https://stackoverflow.com/questions/25091571/strange-behavior-from-vba-dataobject-gettext-returns-what-is-currently-on-the-c/54960767#54960767



Private Type POINTAPI
x As Long: Y As Long
End Type
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
#If VBA7 Then
Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Declare PtrSafe Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As LongPtr, ByVal wFlag As Long) As LongPtr
Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, lpRect As RECT) As Long
Declare PtrSafe Function BringWindowToTop Lib "user32" (ByVal hwnd As LongPtr) As Long
Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)
#If Win64 Then
Private Declare PtrSafe Function AccessibleObjectFromPoint Lib "oleacc" (ByVal arg1 As LongPtr, ppacc As Any, pvarChild As Variant) As Long
#Else
Private Declare PtrSafe Function AccessibleObjectFromPoint Lib "oleacc" (ByVal lX As Long, ByVal lY As Long, ppacc As IAccessible, pvarChild As Variant) As Long
#End If
Dim hwndClip As LongPtr
Dim hwndScrollBar As LongPtr
Dim lngPtr As LongPtr
#Else
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hWnd As Long, ByVal wFlag As Long) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Declare Function BringWindowToTop Lib "user32" (ByVal hWnd As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Declare Function AccessibleObjectFromPoint Lib "oleacc" (ByVal lX As Long, ByVal lY As Long, ppacc As IAccessible, pvarChild As Variant) As Long
Dim hwndClip As Long
Dim hwndScrollBar As Long
#End If
Const GW_CHILD = 5
Const S_OK = 0

Sub ClearOffPainBouton() 'OhFolloks
'Application.DisplayClipboardWindow = True
Dim tRect1 As RECT, tRect2 As RECT
Dim tPt As POINTAPI
Dim oIA As IAccessible
Dim vKid As Variant
Dim lResult As Long
Dim i As Long
Static bHidden As Boolean
Dim MyPain As String 'COMsOLEwollupsActivelyEmmbeddedXratedObjectHookMy BoutonOhFolloks
If CLng(Val(Application.Version)) <= 11 Then
Let MyPain = "Task Pane"
Else
Let MyPain = "Office Clipboard"
End If
If CommandBars(MyPain).Visible = False Then
bHidden = True
CommandBars(MyPain).Visible = True
Application.OnTime Now + TimeValue("00:00:01"), "ClearOffPainBouton": Exit Sub
End If

Let hwndClip = FindWindowEx(Application.hWnd, 0, "EXCEL2", vbNullString)
Let hwndClip = FindWindowEx(hwndClip, 0, "MsoCommandBar", CommandBars(MyPain).NameLocal)
Let hwndClip = GetNextWindow(hwndClip, GW_CHILD)
Let hwndScrollBar = GetNextWindow(GetNextWindow(hwndClip, GW_CHILD), GW_CHILD)

If hwndClip And hwndScrollBar Then
GetWindowRect hwndClip, tRect1
GetWindowRect hwndScrollBar, tRect2
BringWindowToTop Application.hWnd
For i = 0 To tRect1.Right - tRect1.Left Step 50
tPt.x = tRect1.Left + i: tPt.Y = tRect1.Top - 10 + (tRect2.Top - tRect1.Top) / 2
#If VBA7 And Win64 Then
CopyMemory lngPtr, tPt, LenB(tPt)
Let lResult = AccessibleObjectFromPoint(lngPtr, oIA, vKid)
#Else
Let lResult = AccessibleObjectFromPoint(tPt.x, tPt.Y, oIA, vKid)
#End If ' ##### avec moi si vou ple La légende du bouton
If InStr("Clear All Borrar todo Effacer tout Alle löschen La légende du bouton", oIA.accName(vKid)) Then
Call oIA.accDoDefaultAction(vKid): CommandBars(MyPain).Visible = Not bHidden: bHidden = False: Exit Sub
End If
DoEvents
Next i
End If
Let CommandBars(MyPain).Visible = Not bHidden
MsgBox "Unable to clear the Office Clipboard"
End Sub

Sub TestVersion() ' Rory Archibald 2015
MsgBox prompt:=ExcelVersion
MsgBox prompt:=CLng(Val(Application.Version))
End Sub
Private Function ExcelVersion() As String
Dim Temp As String

'On Error Resume Next
#If Mac Then
Select Case CLng(Val(Application.Version))
Case 11: Temp = "Excel 2004"
Case 12: Temp = "Excel 2008" ' this should NEVER happen!
Case 14: Temp = "Excel 2011"
Case 15: Temp = "Excel 2016 (Mac)"
Case Else: Temp = "Unknown"
End Select
#Else
Select Case CLng(Val(Application.Version))
Case 9: Temp = "Excel 2000"
Case 10: Temp = "Excel 2002"
Case 11: Temp = "Excel 2003"
Case 12: Temp = "Excel 2007"
Case 14: Temp = "Excel 2010"
Case 15: Temp = "Excel 2013"
Case 16: Temp = "Excel 2016 (Windows)"
Case Else: Temp = "Unknown"
End Select
#End If
#If Win64 Then
Temp = Temp & " 64 bit"
#Else
Temp = Temp & " 32 bit"
#End If

ExcelVersion = Temp
End Function

DocAElstein
03-03-2019, 05:46 PM
Code in support of this Thread
http://www.excelfox.com/forum/showthread.php/2240-VBA-referring-to-external-shared-Libraries-1)-Early-1-5)-Laterly-Early-and-2)-Late-Binding-Techniques?p=11018&viewfull=1#post11018

In simple terms this clears the Windows Clipboard.
More likely there is an awful lot more to it than that, so I may come back here with a much larger offering in the future.... _
_.. the various Microsoft Clipboards and the versions of copies that hey hold have a spaghetti of interdependencies that anyone has long since given up trying to understand**. Sadly it will probably be left to some later form of artificial intelligence to understand.. and use effectively… against us…. … you are experiencing a car accident…. The hell I am…. https://www.youtube.com/watch?v=qhAFWW-p7PQ......








#If VBA7 Then
Private Declare PtrSafe Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
Private Declare PtrSafe Function EmptyClipboard Lib "User32" () As Long
Private Declare PtrSafe Function CloseClipboard Lib "User32" () As Long
#Else
Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "User32" () As Long
Private Declare Function CloseClipboard Lib "User32" () As Long
#End If

Public Function ClearWindowsClipboard()
If OpenClipboard(0&) Then
EmptyClipboard
CloseClipboard
Else
MsgBox "OpenClipboard failed"
End If
End Function

Sub Test()
Call ClearWindowsClipboard
End Sub







Ref

https://www.spreadsheet1.com/how-to-copy-strings-to-clipboard-using-excel-vba.html
http://www.eileenslounge.com/viewtopic.php?f=30&t=31849#p246687
http://www.eileenslounge.com/viewtopic.php?f=30&t=31849&start=20#p246887
https://docs.microsoft.com/en-us/office/vba/language/concepts/forms/what-is-the-difference-between-the-dataobject-and-the-clipboard
http://excelmatters.com/2013/10/04/late-bound-msforms-dataobject/
https://stackoverflow.com/questions/25091571/strange-behavior-from-vba-dataobject-gettext-returns-what-is-currently-on-the-c
https://stackoverflow.com/questions/25091571/strange-behavior-from-vba-dataobject-gettext-returns-what-is-currently-on-the-c/54960767#54960767
https://docs.microsoft.com/de-de/office/vba/access/Concepts/Windows-API/retrieve-information-from-the-clipboard
https://docs.microsoft.com/de-de/office/vba/access/Concepts/Windows-API/send-information-to-the-clipboard
https://social.msdn.microsoft.com/Forums/en-US/48e8c30c-24ee-458e-a873-a4e6e13f5926/dataobject-settext-and-putinclipboard-sequence-puts-invalid-data-hex-63-characters-in-clipboard?forum=isvvba
https://wellsr.com/vba/2015/tutorials/vba-copy-to-clipboard-paste-clear/
http://www.eileenslounge.com/viewtopic.php?f=30&t=31849&p=246738#p246698
http://www.cpearson.com/excel/clipboard.aspx
http://excelmatters.com/2013/10/04/late-bound-msforms-dataobject/
http://www.eileenslounge.com/viewtopic.php?f=30&t=31849
** https://www.mrexcel.com/forum/excel-questions/828241-vba-autofilter-specialcells-xlcelltypevisible-copy-only-values-not-formulas.html#post4043472
https://www.mrexcel.com/forum/excel-questions/1012452-copy-clipboard.html#post4859707
https://www.spreadsheet1.com/how-to-copy-strings-to-clipboard-using-excel-vba.html
https://bytecomb.com/copy-and-paste-in-vba/
https://chandoo.org/forum/threads/clipboard-copy-vba-code-not-working-in-windows-10.37126/

DocAElstein
03-03-2019, 09:16 PM
Coding in support of this post:
http://www.excelfox.com/forum/showthread.php/2240-VBA-referring-to-external-shared-Libraries-1)-Early-1-5)-Laterly-Early-and-2)-Late-Binding-Techniques?p=11018&viewfull=1#post11018





Sub MSFORMS_Early_Copy_and_Later_Late_Binding_Paste()
Rem 1 Late Binding
Dim DtaObj As MSForms.DataObject ' RefMSFORMS.JPG : https://imgur.com/8zKpyr2
Set DtaObj = New MSForms.DataObject
'Dim DtaObj As New MSForms.DataObject
Rem 1 ' Arbritrary Excel range values copy
Let Range("A1").Value = "CellA1": Let Range("A2").Value = "CellA2": Let Range("B1").Value = "CellB1": Let Range("B2").Value = "CellB2"
Rem 2 Clipboard Data object stuff - get the long string that is held in some clipboards
Range("A1:B2").Copy ' ' This seems to fill Excel, Windows and Office Clipboards http://www.eileenslounge.com/viewtopic.php?f=30&t=31849&p=246889#p246887
' Get some string version from some clipboard using a DataObject method
' Let Application.CutCopyMode = False ' generally speaking these two code lines will not clear the Windows Clipboards,
' Call ClearOffPainBouton ' but they do for the case of a range copy having put them in. So we can't do these here
DtaObj.GetFromClipboard ' ' This is filling a regisrre and possibly sometimes setting referrences that may prevent other things being done, or put them in a Queue, bit most likely to put a spanner in the works
Let Application.CutCopyMode = False
Call ClearOffPainBouton
' Range("A1:B2").Clear ' ' This will cause us to fail .. very strange .. this could suggest that we are still holding a range referrence at this stage
Dim strGet As String: Let strGet = DtaObj.GetText()
Range("A1:B2").Clear ' At this point it is fine to do this
Rem 3 examine string
Call WtchaGot(strIn:=strGet) ' ' Function to see string : https://pastebin.com/gtLaBrf5
'3b Do some modification of the string
Let strGet = Replace(strGet, vbTab, "|", 1, -1, vbBinaryCompare) ' replace in the strGet , vbTab , with "|" pipes , I want all output so starting at first character , -1 means replace all occurances , exact match using computer exact digits
' Call ClearWindowsClipboard ' http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11020&viewfull=1#post11020 clearing the windows clipboard at this point also messes the simple reverse process from working. This makes no sense at all: Clearly clearing does not always clear things: It may do this in many occasions as one of its actions, but it can also do things which have something near to the opposite effect.

Rem 4 Replace the version previously got using another DataObject method
'4a) Simple reverse action
DtaObj.Clear ' Without this the following 2 line simple reverse action would not work
' DtaObj.SetText Text:=strGet: ' Let strGet = DtaObj.GetText() ' - This always gets the last "addition" ... https://stackoverflow.com/questions/25091571/strange-behavior-from-vba-dataobject-gettext-returns-what-is-currently-on-the-c/54960767#54960767
' DtaObj.PutInClipboard
'4b) Later Late Binding
Dim LaterDtaObj As Object
Set LaterDtaObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
'Set LaterDtaObj = CreateObject("MSForms.DataObject") ' https://bytecomb.com/copy-and-paste-in-vba/
LaterDtaObj.SetText Text:=strGet
LaterDtaObj.PutInClipboard
Rem 5 ' Excel Range Paste ( using Worksheet.Paste method https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.paste )
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
End Sub













' SHimpfGlified Coding
Sub Early_Copy_and_Later_Late_Binding_Paste()
Rem 1 Late Binding
Dim DtaObj As MSForms.DataObject ' RefMSFORMS.JPG : https://imgur.com/8zKpyr2
Set DtaObj = New MSForms.DataObject
Rem 1 ' Arbritrary Excel range values copy
Let Range("A1").Value = "CellA1": Let Range("A2").Value = "CellA2": Let Range("B1").Value = "CellB1": Let Range("B2").Value = "CellB2"
Rem 2 Clipboard Data object stuff - get the long string that is held in some clipboards
Range("A1:B2").Copy '
DtaObj.GetFromClipboard '
Dim strGet As String: Let strGet = DtaObj.GetText()
Range("A1:B2").Clear
Rem 3 examine string
' Call WtchaGot(strIn:=strGet) '
'3b Do some modification of the string
Let strGet = Replace(strGet, vbTab, "|", 1, -1, vbBinaryCompare)
Rem Simple reverse action. Later Late Binding
Dim LaterDtaObj As Object
Set LaterDtaObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
LaterDtaObj.SetText Text:=strGet
LaterDtaObj.PutInClipboard
Rem 5 ' Excel Range Paste ( using Worksheet.Paste method https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.paste )
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
End Sub

DocAElstein
03-13-2019, 09:38 PM
Global variables should go at top of code module

Option Explicit
Dim Cms() As Variant, Rs() As Variant ' "HorizointalColumn" Indicies , "Virtical row" Indicies
Dim RngToSort As Range ' Test data range
Dim arrIndx() As Variant ' For modified array at end of each sort of a set of rows
Dim arrOrig() As Variant ' This arrIndx() = Application.Index(arrOrig(), Rs(), Cms()) applies the modified Rs() to the original unsorted data range. So we need an array to use constantly containing the original data range


A required function

Function CL(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Do
Let CL = Chr(65 + (((lclm - 1) Mod 26))) & CL
Let lclm = (lclm - (1)) \ 26
Loop While lclm > 0
End Function




























Function FukOutChrWithDoWhile(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Dim rest As Long 'Variable for what is "left over" after subtracting as many full 26's as possible
Do
' Let rest = ((lclm - 1) Mod 26) 'Gives 0 to 25 for Column Number "Left over" 1 to 26. Better than ( lclm Mod 26 ) which gives 1 to 25 for clm 1 to 25 then 0 for 26
' Let FukOutChrWithDoWhile = Chr(65 + rest) & FukOutChrWithDoWhile 'Convert rest to Chr Number, initially with full number so the "units" (0-25), then number of 26's left over (if the number was so big to give any amount of 26's in it, then number of 26's in the 26's left over (if the number was so big to give any amount of 26 x 26's in it, Enit ?
' 'OR
Let FukOutChrWithDoWhile = Chr(65 + (((lclm - 1) Mod 26))) & FukOutChrWithDoWhile
Let lclm = (lclm - (1)) \ 26 'This gives the number of 26's ( if any ), but just the excact part, in the next number down , - so applying the rest formula to this new number will again leave a difference "left over" rest.
'lclm = (lclm - (rest + 1)) \ 26 ' As the number is effectively truncated here, any number from 1 to (rest +1) will do in the formula
Loop While lclm > 0 'Only loop further if number was big enough to still have 0-25's in it
End Function
' https://www.excelforum.com/development-testing-forum/1101544-thread-post-appendix-no-reply-needed-please-do-not-delete-thanks-4.html#post4213887
' https://www.excelforum.com/tips-and-tutorials/1213798-all-sub-folder-and-file-list-from-vba-recursion-routine-explanation-and-method-comparison.html




Test routine to Call main recursion routine ( given in next post )

Sub TestieSimpleArraySort7()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
' Dim RngToSort As Range
Set RngToSort = WsS.Range("R23:W37")
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
' Let arrIndx() = arrTS()
Let arrOrig() = arrTS() ' This Application.Index(arrOrig(), Rs(), Cms()) applies the modified Rs() to the original unsorted data range. So we need an array to use constantly containing the original data range
' Call SimpleArraySort7(1, arrTS(), " 1 2 3 4 5 ", " 1 Asc 2 Asc 3 Asc")
' Column Indicies
Let Cms() = Evaluate("=Column(" & CL(1) & ":" & CL(RngToSort.Columns.Count) & ")")
Let Cms() = Evaluate("=Column(A:F)")
' Initial row indicies
Let Rs() = Evaluate("=Row(1:" & RngToSort.Rows.Count & ")")
' test index
RngToSort.Offset(-1, 0).Resize(1, UBound(Cms())).Value = Cms()
RngToSort.Offset(0, -1).Resize(UBound(Rs(), 1), UBound(Rs(), 2)).Value = Rs()
RngToSort.Offset(RngToSort.Rows.Count, 0).Clear
Let RngToSort.Offset(RngToSort.Rows.Count, 0).Value = Application.Index(arrTS(), Rs(), Cms())
' Let RngToSort.Offset(RngToSort.Rows.Count, 0).Value = Application.Index(arrIndx(), Rs(), Cms())
RngToSort.Offset(RngToSort.Rows.Count, -1).Resize(UBound(Rs(), 1), UBound(Rs(), 2)).Value = Rs()
Dim cnt As Long, strIndcs As String: Let strIndcs = " "
For cnt = 1 To RngToSort.Rows.Count
Let strIndcs = strIndcs & cnt & " "
Next cnt
Debug.Print strIndcs ' For 5 rows , for example we will have " 1 2 3 4 5 " , for 15 rows " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 "
Call SimpleArraySort7(1, arrTS(), strIndcs, " 1 Desc 3 Asc 5 Asc")
Rem 2 Output for easy of demo
' 2a
RngToSort.Offset(0, RngToSort.Columns.Count).Clear
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrTS()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
' 2b VBA Range.Sort Method equivalent
Dim TestRngSrt As Range: Set TestRngSrt = RngToSort.Offset(0, RngToSort.Columns.Count * 2)
TestRngSrt.Clear
Let TestRngSrt.Value = RngToSort.Value
TestRngSrt.Sort Key1:=TestRngSrt.Columns("A:A"), order1:=xlDescending, Key2:=TestRngSrt.Columns("C:C"), order2:=xlAscending, Key3:=TestRngSrt.Columns("E:E"), order3:=xlAscending, MatchCase:=False
TestRngSrt.Interior.Color = vbGreen
End Sub

DocAElstein
03-13-2019, 09:45 PM
Sub SimpleArraySort7(ByVal CpyNo As Long, ByRef arsRef() As Variant, ByVal strRws As String, ByVal strKeys As String)
Dim CopyNo As Long: Let CopyNo = CpyNo ' On every recurssion run this will be increased by the Rec Call. This will be a local variable indicating the level down in recursion - I increase it by 1 at every Rec Call, that is to say each Rec Call gets given CopyNo+1 - during a long tunnel down, the number at this pint will keep increasing to reflect how far down we are
If CopyNo = 1 Then Debug.Print "First procedure Call"
Rem -1 from the supplied arguments, get all data needed in current bubble sort
' Column for this level sort , and Ascending or Descending - both determined from the supplied forth arguments and the column/ copy number
Dim Keys() As String: Let Keys() = Split(Replace(Trim(strKeys), " ", " ", 1, -1, vbBinaryCompare), " ", -1, vbBinaryCompare) '' The extra replace allows for me seperating with one or two spaces - the following would do if I only used one space always Split(Trim(strKeys), " ", -1, vbBinaryCompare) ' this will be an array twice as big as the number of keys that we have
If (2 * CopyNo) > UBound(Keys()) + 1 Then MsgBox Prompt:="You need more than " & (UBound(Keys()) + 1) / 2 & " keys to complete sort": Exit Sub ' case we have less keys then we need to sort, are array has twice as many elements as we have supplied keys since we have a key and whether it needs to get bigger or smaller , and array is from 0 so must add 1 to ubound then half it get the key number we gave. We come here if the last column we gave as a Key had duplicates in it
Dim GlLl As Long: If Keys((CopyNo * 2) - 1) = "Desc" Then Let GlLl = 1 ' (CopyNo * 2) - 1) gives as we go down levels 1 3 5 7 etc We're seeing if we had Desc for this column
Dim Clm As Long: Let Clm = CLng(Keys((CopyNo * 2) - 2)) ' ' (CopyNo * 2) - 2) gives as we go down levels 0 2 4 6 etc We are picking out the supplied column to sort by for each level
' making an array from the " 3 4 5 6 " string is just for convenience later of getting the upper and lower row numbers
Dim Rws() As String: Let Rws() = Split(Trim(strRws), " ", -1, vbBinaryCompare) ' We take the supplied sequential string 2 3 4 5 6 and make a 1 D array {1, 2, 3....} as it is a bit more conveniant to work with. Actually we only need the start and top numbers so we could do it with stinr manipulation instead
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = Rws(LBound(Rws())) To Rws(UBound(Rws()) - 1) ' For first row indicie to last but one row indicie
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To Rws(UBound(Rws())) ' from just above left hand through all the rest
If GlLl = 0 Then ' We want Ascending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then ' Numeric case
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
Else ' Non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) > UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
'Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
End If ' End of numeric or text comparison
Else ' GlLl is not 0 , so presumably we want Descending list
If IsNumeric(arsRef(rOuter, Clm)) And IsNumeric(arsRef(rInner, Clm)) Then
If CDbl(arsRef(rOuter, Clm)) < CDbl(arsRef(rInner, Clm)) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
'Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
Else ' non numeric case
If UCase(CStr(arsRef(rOuter, Clm))) < UCase(CStr(arsRef(rInner, Clm))) Then
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
'Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
End If ' End of numeric or text comparison
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
Debug.Print "Doing an arrIndx()"
Let arrIndx() = Application.Index(arrOrig(), Rs(), Cms())
' Captains Blog, Start Treck
RngToSort.Offset((RngToSort.Rows.Count * (CopyNo + 1)), 0).Clear ' Area for array produced from previous method
Let RngToSort.Offset((RngToSort.Rows.Count * (CopyNo + 1)), 0).Value = arsRef()
RngToSort.Offset((RngToSort.Rows.Count * (CopyNo + 1)), RngToSort.Columns.Count).Clear ' Area for array produced by Index method idea
Let RngToSort.Offset((RngToSort.Rows.Count * (CopyNo + 1)), RngToSort.Columns.Count).Value = arrIndx()
RngToSort.Offset((RngToSort.Rows.Count * (CopyNo + 1)), -1).Resize(UBound(Rs(), 1), UBound(Rs(), 2)).Clear
Let RngToSort.Offset((RngToSort.Rows.Count * (CopyNo + 1)), -1).Resize(UBound(Rs(), 1), UBound(Rs(), 2)).Value = Rs() ' Current indicies order to apply to original range
Debug.Print " Running Copy " & CopyNo & " of routine." & vbCr & vbLf & " Sorted rows " & strRws & " based on values in column " & Clm & vbCr & vbLf & " Checking now for Dups in that last sorted list" & vbCr & vbLf
' Rem 3 Determine any duplicates in sort column values , and re run the routine to sort them by another column
Let rOuter = Rws(LBound(Rws())) - 1 ' we look for duplicates in the current list, in the loop below we add 1 each time so _ it is necersarry to start 1 before, so that +1 the first time is the start row
Let strRws = "" ' ready for use in duplicate search
Do ' Loop down the last set of sorted rows ************************************************** **|
Let rOuter = rOuter + 1 ' next row number _ it was necersarry to start 1 before, so that +1 the first time is the start row
If strRws = "" Or Trim(strRws) = rOuter - 1 Then Let strRws = " " & rOuter & " " ' case starting again to get duplicates
If Trim(UCase(CStr(arsRef(rOuter, Clm)))) = Trim(UCase(CStr(arsRef(rOuter + 1, Clm)))) Then ' case in duplicate rows
Let strRws = strRws & rOuter + 1 & " " ' we building a list like " 4 5 6 " based on if the next is a duplicate value, which is determined by the last line
Else ' when we did not have a next duplicate, we may have a few already grouped
If Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case we have at least 2 duplicates but have hit end of that list
Debug.Print "Found dups in last list column " & Clm & ", " & strRws & " , so now Rec Call 1" ' This is done for every duplicated value section, except if we have duplicates at the last lines
Call SimpleArraySort7(CopyNo + 1, arsRef(), strRws, strKeys) ' Rec Call 1 I need to sort the last duplicates
Let strRws = "" ' ready to try for another set of duplicates
Else
End If
End If ' this is the end of the stuff in most situations...
' ...below section catches rows at the end that might need to be sorted. ......|
If rOuter = UBound(arsRef(), 1) - 1 And Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case of duplicates in last row
Debug.Print "Found dups in last list, so now Rec Call 2 (Dups at list end case)" ' Rec Call 2 - only done for duplicates at end of list
Call SimpleArraySort7(CopyNo + 1, arsRef(), strRws, strKeys)
Else
End If '... .................................................. ..............|
Loop While rOuter <> Rws(UBound(Rws()) - 1) ' keep looking for Duplicates in next row**********|
End Sub

DocAElstein
03-14-2019, 03:52 PM
Global variables required. ( Must go at top of code module )

Option Explicit
Dim Cms() As Variant, Rs() As Variant ' "Horizointal Column" Indicies , "Virtical row" Indicies
Dim RngToSort As Range ' Test data range
Dim arrOrig() As Variant ' This arrIndx() = Application.Index(arrOrig(), Rs(), Cms()) applies the modified Rs() to the original unsorted data range. So we need an array to use constantly containing the original data range



A required function

Function CL(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Do
Let CL = Chr(65 + (((lclm - 1) Mod 26))) & CL
Let lclm = (lclm - (1)) \ 26
Loop While lclm > 0
End Function




























Function FukOutChrWithDoWhile(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Dim rest As Long 'Variable for what is "left over" after subtracting as many full 26's as possible
Do
' Let rest = ((lclm - 1) Mod 26) 'Gives 0 to 25 for Column Number "Left over" 1 to 26. Better than ( lclm Mod 26 ) which gives 1 to 25 for clm 1 to 25 then 0 for 26
' Let FukOutChrWithDoWhile = Chr(65 + rest) & FukOutChrWithDoWhile 'Convert rest to Chr Number, initially with full number so the "units" (0-25), then number of 26's left over (if the number was so big to give any amount of 26's in it, then number of 26's in the 26's left over (if the number was so big to give any amount of 26 x 26's in it, Enit ?
' 'OR
Let FukOutChrWithDoWhile = Chr(65 + (((lclm - 1) Mod 26))) & FukOutChrWithDoWhile
Let lclm = (lclm - (1)) \ 26 'This gives the number of 26's ( if any ), but just the excact part, in the next number down , - so applying the rest formula to this new number will again leave a difference "left over" rest.
'lclm = (lclm - (rest + 1)) \ 26 ' As the number is effectively truncated here, any number from 1 to (rest +1) will do in the formula
Loop While lclm > 0 'Only loop further if number was big enough to still have 0-25's in it
End Function
' https://www.excelforum.com/development-testing-forum/1101544-thread-post-appendix-no-reply-needed-please-do-not-delete-thanks-4.html#post4213887
' https://www.excelforum.com/tips-and-tutorials/1213798-all-sub-folder-and-file-list-from-vba-recursion-routine-explanation-and-method-comparison.html



Calling routine ( to call recursion routine in next post )

Sub TestieSimpleArraySort8()
Rem 0 test data, worksheets info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
' Dim RngToSort As Range
Set RngToSort = WsS.Range("R23:W37")
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8
Dim arrTS() As Variant: Let arrTS() = RngToSort.Value ' We would have to use .Value for a range capture of this sort because .Value returns a field of Variant types. But also at this stage we want to preserve string and number types
Let arrIndx() = arrTS()
Let arrOrig() = arrTS() ' This Application.Index(arrOrig(), Rs(), Cms()) applies the modified Rs() to the original unsorted data range. So we need an array to use constantly containing the original data range
' Call SimpleArraySort8(1, arrTS(), " 1 2 3 4 5 ", " 1 Asc 2 Asc 3 Asc")
' Column Indicies
Let Cms() = Evaluate("=Column(" & CL(1) & ":" & CL(RngToSort.Columns.Count) & ")")
Let Cms() = Evaluate("=Column(A:F)")
' Initial row indicies
Let Rs() = Evaluate("=Row(1:" & RngToSort.Rows.Count & ")")
' test index
RngToSort.Offset(-1, 0).Resize(1, UBound(Cms())).Value = Cms()
RngToSort.Offset(0, -1).Resize(UBound(Rs(), 1), UBound(Rs(), 2)).Value = Rs()
RngToSort.Offset(RngToSort.Rows.Count, 0).ClearContents
Let RngToSort.Offset(RngToSort.Rows.Count, 0).Value = Application.Index(arrTS(), Rs(), Cms())
' Let RngToSort.Offset(RngToSort.Rows.Count, 0).Value = Application.Index(arrIndx(), Rs(), Cms())
RngToSort.Offset(RngToSort.Rows.Count, -1).Resize(UBound(Rs(), 1), UBound(Rs(), 2)).Value = Rs()
Dim cnt As Long, strIndcs As String: Let strIndcs = " "
For cnt = 1 To RngToSort.Rows.Count
Let strIndcs = strIndcs & cnt & " "
Next cnt
Debug.Print strIndcs ' For 5 rows , for example we will have " 1 2 3 4 5 " , for 15 rows " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 "
Call SimpleArraySort8(1, arrTS(), strIndcs, " 1 Desc 3 Asc 5 Asc")
Rem 2 Output for easy of demo
' 2a
RngToSort.Offset(0, RngToSort.Columns.Count).Clear
Let RngToSort.Offset(0, RngToSort.Columns.Count).Value = arrTS()
Let RngToSort.Offset(0, RngToSort.Columns.Count).Interior.Color = vbYellow
' 2b VBA Range.Sort Method equivalent
Dim TestRngSrt As Range: Set TestRngSrt = RngToSort.Offset(0, RngToSort.Columns.Count * 2)
TestRngSrt.Clear
Let TestRngSrt.Value = RngToSort.Value
TestRngSrt.Sort Key1:=TestRngSrt.Columns("A:A"), order1:=xlDescending, Key2:=TestRngSrt.Columns("C:C"), order2:=xlAscending, Key3:=TestRngSrt.Columns("E:E"), order3:=xlAscending, MatchCase:=False
TestRngSrt.Interior.Color = vbGreen
End Sub

DocAElstein
03-14-2019, 04:30 PM
recursion routine Called by routine ( Sub TestieSimpleArraySort8() ) from last post

' Main recursion routine below : Bubble Sorting in Arrays using multi columns values for sort criteria
Sub SimpleArraySort8(ByVal CpyNo As Long, ByRef arrIndx() As Variant, ByVal strRws As String, ByVal strKeys As String)
Dim CopyNo As Long: Let CopyNo = CpyNo ' On every recurssion run this will be increased by the Rec Call. This will be a local variable indicating the level down in recursion - I increase it by 1 at every Rec Call, that is to say each Rec Call gets given CopyNo+1 - during a long tunnel down, the number at this pint will keep increasing to reflect how far down we are
If CopyNo = 1 Then Debug.Print "First procedure Call"
Rem -1 from the supplied arguments, get all data needed in current bubble sort
' Column for this level sort , and Ascending or Descending - both determined from the supplied forth arguments and the column/ copy number
Dim Keys() As String: Let Keys() = Split(Replace(Trim(strKeys), " ", " ", 1, -1, vbBinaryCompare), " ", -1, vbBinaryCompare) '' The extra replace allows for me seperating with one or two spaces - the following would do if I only used one space always Split(Trim(strKeys), " ", -1, vbBinaryCompare) ' this will be an array twice as big as the number of keys that we have
If (2 * CopyNo) > UBound(Keys()) + 1 Then MsgBox Prompt:="You need more than " & (UBound(Keys()) + 1) / 2 & " keys to complete sort": Exit Sub ' case we have less keys then we need to sort, are array has twice as many elements as we have supplied keys since we have a key and whether it needs to get bigger or smaller , and array is from 0 so must add 1 to ubound then half it get the key number we gave. We come here if the last column we gave as a Key had duplicates in it
Dim GlLl As Long: If Keys((CopyNo * 2) - 1) = "Desc" Then Let GlLl = 1 ' (CopyNo * 2) - 1) gives as we go down levels 1 3 5 7 etc We're seeing if we had Desc for this column
Dim Clm As Long: Let Clm = CLng(Keys((CopyNo * 2) - 2)) ' ' (CopyNo * 2) - 2) gives as we go down levels 0 2 4 6 etc We are picking out the supplied column to sort by for each level
' making an array from the " 3 4 5 6 " string is just for convenience later of getting the upper and lower row numbers
Dim Rws() As String: Let Rws() = Split(Trim(strRws), " ", -1, vbBinaryCompare) ' We take the supplied sequential string 2 3 4 5 6 and make a 1 D array {1, 2, 3....} as it is a bit more conveniant to work with. Actually we only need the start and top numbers so we could do it with stinr manipulation instead
Rem 1 Simple Bubble Sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
For rOuter = Rws(LBound(Rws())) To Rws(UBound(Rws()) - 1) ' For first row indicie to last but one row indicie
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To Rws(UBound(Rws())) ' from just above left hand through all the rest
If GlLl = 0 Then ' We want Ascending list
If IsNumeric(arrIndx(rOuter, Clm)) And IsNumeric(arrIndx(rInner, Clm)) Then ' Numeric case
If CDbl(arrIndx(rOuter, Clm)) > CDbl(arrIndx(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
' Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
Let Temp = arrIndx(rOuter, Clm): Let arrIndx(rOuter, Clm) = arrIndx(rInner, Clm): Let arrIndx(rInner, Clm) = Temp
Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
Else ' Non numeric case
If UCase(CStr(arrIndx(rOuter, Clm))) > UCase(CStr(arrIndx(rInner, Clm))) Then
Let Temp = arrIndx(rOuter, Clm): Let arrIndx(rOuter, Clm) = arrIndx(rInner, Clm): Let arrIndx(rInner, Clm) = Temp
'Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
End If ' End of numeric or text comparison
Else ' GlLl is not 0 , so presumably we want Descending list
If IsNumeric(arrIndx(rOuter, Clm)) And IsNumeric(arrIndx(rInner, Clm)) Then
If CDbl(arrIndx(rOuter, Clm)) < CDbl(arrIndx(rInner, Clm)) Then
Let Temp = arrIndx(rOuter, Clm): Let arrIndx(rOuter, Clm) = arrIndx(rInner, Clm): Let arrIndx(rInner, Clm) = Temp
'Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
Else ' non numeric case
If UCase(CStr(arrIndx(rOuter, Clm))) < UCase(CStr(arrIndx(rInner, Clm))) Then
Let Temp = arrIndx(rOuter, Clm): Let arrIndx(rOuter, Clm) = arrIndx(rInner, Clm): Let arrIndx(rInner, Clm) = Temp
'Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
End If ' End of numeric or text comparison
End If ' End of Ascending or Descending example
Next rInner ' ---------------------------------------------------------------------
Next rOuter ' ================================================== =========================================
Debug.Print "Doing an arrIndx()"
Let arrIndx() = Application.Index(arrOrig(), Rs(), Cms())
' Captains Blog, Start Treck
Debug.Print " Running Copy " & CopyNo & " of routine." & vbCr & vbLf & " Sorted rows " & strRws & " based on values in column " & Clm & vbCr & vbLf & " Checking now for Dups in that last sorted list" & vbCr & vbLf
' Rem 3 Determine any duplicates in sort column values , and re run the routine to sort them by another column
Let rOuter = Rws(LBound(Rws())) - 1 ' we look for duplicates in the current list, in the loop below we add 1 each time so _ it is necersarry to start 1 before, so that +1 the first time is the start row
Let strRws = "" ' ready for use in duplicate search
Do ' Loop down the last set of sorted rows ************************************************** **|
Let rOuter = rOuter + 1 ' next row number _ it was necersarry to start 1 before, so that +1 the first time is the start row
If strRws = "" Or Trim(strRws) = rOuter - 1 Then Let strRws = " " & rOuter & " " ' case starting again to get duplicates
If Trim(UCase(CStr(arrIndx(rOuter, Clm)))) = Trim(UCase(CStr(arrIndx(rOuter + 1, Clm)))) Then ' case in duplicate rows
Let strRws = strRws & rOuter + 1 & " " ' we building a list like " 4 5 6 " based on if the next is a duplicate value, which is determined by the last line
Else ' when we did not have a next duplicate, we may have a few already grouped
If Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case we have at least 2 duplicates but have hit end of that list
Debug.Print "Found dups in last list column " & Clm & ", " & strRws & " , so now Rec Call 1" ' This is done for every duplicated value section, except if we have duplicates at the last lines
Call SimpleArraySort8(CopyNo + 1, arrIndx(), strRws, strKeys) ' Rec Call 1 I need to sort the last duplicates
Let strRws = "" ' ready to try for another set of duplicates
Else
End If
End If ' this is the end of the stuff in most situations...
' ...below section catches rows at the end that might need to be sorted. ......|
If rOuter = UBound(arrIndx(), 1) - 1 And Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case of duplicates in last row
Debug.Print "Found dups in last list, so now Rec Call 2 (Dups at list end case)" ' Rec Call 2 - only done for duplicates at end of list
Call SimpleArraySort8(CopyNo + 1, arrIndx(), strRws, strKeys)
Else
End If '... .................................................. ..............|
Loop While rOuter <> Rws(UBound(Rws()) - 1) ' keep looking for Duplicates in next row**********|
End Sub

DocAElstein
03-16-2019, 10:09 PM
Coding for this excelfox Post:
http://www.excelfox.com/forum/showthread.php/2307-VBA-Range-Sort-with-arrays-Alternative-for-simple-use?p=11066&viewfull=1#post11066


'
Sub Call_Sub_Bubbles() ' Partially hard coded for ease of explanation
' data range info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As Range: Set RngToSort = WsS.Range("B11:E16")
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8

Dim arrTS() As Variant ' array to be referred to in all recursion routines, initially the original data range
Let arrTS() = RngToSort.Value
' Initial row indicies
Let Rs() = Evaluate("=Row(1:6)") '
Dim strRows As String, Cnt As Long: Let strRows = " "
For Cnt = 1 To 6
Let strRows = strRows & Rs(Cnt, 1) & " "
Next Cnt
' we should have now strRows = " 1 2 3 4 5 6 "
Call Bubbles(1, arrTS(), strRows, " 1 Asc 3 Asc 2 Asc ")

' Demo output
Let WsS.Range("B31").Resize(RngToSort.Rows.Count, RngToSort.Columns.Count).Value = arrTS()
End Sub
'
Sub Bubbles(ByVal CpyNo As Long, ByRef arsRef() As Variant, ByVal strRws As String, ByVal strKeys As String)
Dim CopyNo As Long: Let CopyNo = CpyNo ' On every recurssion run this will be increased by the Rec Call. This will be a local variable indicating the level down in recursion - I increase it by 1 at every Rec Call, that is to say each Rec Call gets given CopyNo+1 - during a long tunnel down, the number at this pint will keep increasing to reflect how far down we are. This ensures we then have the correct value place at the start of any newly starting copy of the recursion routine, since the first copy of the recursion routine pauses and starts the second copy of the recursion routine, the second copy of the recursion routine pauses and starts the third copy of the recursion routine ….. etc…
If CopyNo = 1 Then Debug.Print "First procedure Call"
Rem -1 from the supplied arguments, get all data needed in current bubble sort
Dim Keys() As String: Let Keys() = Split(Replace(Trim(strKeys), " ", " ", 1, -1, vbBinaryCompare), " ", -1, vbBinaryCompare) '' The extra replace allows for me seperating with one or two spaces - the following would do if I only used one space always Split(Trim(strKeys), " ", -1, vbBinaryCompare) ' this will be an array twice as big as the number of keys that we have ...... ' Column for this level sort , and Ascending or Descending - both determined from the supplied forth arguments and the column/ copy number
If (2 * CopyNo) > UBound(Keys()) + 1 Then Debug.Print "You need more than " & (UBound(Keys()) + 1) / 2 & " keys to complete sort": Exit Sub ' case we have less keys then we need to sort, are array has twice as many elements as we have supplied keys since we have a key and whether it needs to get bigger or smaller , and array is from 0 so must add 1 to ubound then half it get the key number we gave. We come here if the last column we gave as a Key had duplicates in it
'Dim GlLl As Long: If Keys((CopyNo * 2) - 1) = "Desc" Then Let GlLl = 1 ' (CopyNo * 2) - 1) gives as we go down levels 1 3 5 7 etc We're seeing if we had Desc for this column
Dim Clm As Long: Let Clm = CLng(Keys((CopyNo * 2) - 2)) ' ' (CopyNo * 2) - 2) gives as we go down levels 0 2 4 6 etc We are picking out the supplied column to sort by for each level
Rem 1 Bubble sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
' For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' THIS WOULD ONLY WORK FOR Copy No 1 For first row indicie to last but one row indicie - I could do this for copy 1
For rOuter = Left(Trim(strRws), InStr(1, Trim(strRws), " ", vbBinaryCompare) - 1) To Right(Trim(strRws), Len(Trim(strRws)) - InStrRev(Trim(strRws), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
'For rOuter = 1 To 5 ' For first run
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To Rs(UBound(Rs(), 1), 1) ' from just above left hand through all the rest
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Next rInner ' -----------------------------------------------------------------------
Next rOuter ' ================================================== ========================================

Rem 3 Preparation for possible recursion Call
' Catpains Blog
Debug.Print " Running Copy No. " & CopyNo & " of routine." & vbCr & vbLf & " Sorted rows " & strRws & " based on values in column " & Clm & vbCr & vbLf & " Checking now for Dups in that last sorted list" & vbCr & vbLf
Dim tempStr As String: Let tempStr = strRws ' Need this bodge because I set strRws="" below
Let strRws = ""
'For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' Only valis for first Copy No 1
For rOuter = Left(Trim(tempStr), InStr(1, Trim(tempStr), " ", vbBinaryCompare) - 1) To Right(Trim(tempStr), Len(Trim(tempStr)) - InStrRev(Trim(tempStr), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
If strRws = "" Or InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then Let strRws = " " & rOuter & " " ' case starting again to get duplicates
'If strRws = "" Or Trim(strRws) = rOuter - 1 Then Let strRws = " " & rOuter & " " ' alternative
If Trim(UCase(CStr(arsRef(rOuter, Clm)))) = Trim(UCase(CStr(arsRef(rOuter + 1, Clm)))) Then ' case in duplicate rows
Let strRws = strRws & rOuter + 1 & " " ' we building a list like " 4 5 6 " based on if the next is a duplicate value, which is determined by the last line
Else ' without the last condition met, we might have the end of a group duplicate rows, in which case it would be time to organise a recursion run so ..... we check for this situation needing a recursion run
If Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case we have at least 2 duplicates but have hit end of that list ( we have at least one space between indices, like " 3 4 " , " 6 7 8" etc.. ---- this , " 2 " , on the other hand, would would not have a space after trimming off the end spaces )
' Now its time to organise a recursion run
Debug.Print "Found dups in last list column " & Clm & ", " & strRws & " , so now main Rec Call " ' This is done for every duplicated
Call Bubbles(CopyNo + 1, arsRef(), strRws, strKeys) ' Rec Call 1 I need to sort the last duplicates
Let strRws = "" ' ready to try for another set of duplicates
Else
End If ' we did not have more than one indicie in strRws so usually that's it for this loop
End If
'+++*** this would be end of loop for most cases
' ...below section catches rows at the end that might need to be sorted. ......|
If rOuter = UBound(arsRef(), 1) - 1 And Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case of duplicates in last row
Debug.Print "Found dups in last rows of last list, so now Rec Call at end of loop (Dups at list end case)" ' loop end rec call - only done for duplicates at end of list
Call Bubbles(CopyNo + 1, arsRef(), strRws, strKeys)
Else
End If '... .................................................. ..............|
Next rOuter ' ************************************************** ************************
Debug.Print "Ending a copy, Copy level " & CopyNo & ""
End Sub

DocAElstein
03-17-2019, 02:21 PM
'
Sub Bubbles(ByVal CpyNo As Long, ByRef arsRef() As Variant, ByVal strRws As String, ByVal strKeys As String)
Dim CopyNo As Long: Let CopyNo = CpyNo ' On every recurssion run this will be increased by the Rec Call. This will be a local variable indicating the level down in recursion - I increase it by 1 at every Rec Call, that is to say each Rec Call gets given CopyNo+1 - during a long tunnel down, the number at this pint will keep increasing to reflect how far down we are. This ensures we then have the correct value place at the start of any newly starting copy of the recursion routine, since the first copy of the recursion routine pauses and starts the second copy of the recursion routine, the second copy of the recursion routine pauses and starts the third copy of the recursion routine ….. etc…
If CopyNo = 1 Then Debug.Print "First procedure Call"
Rem -1 from the supplied arguments, get all data needed in current bubble sort
Dim Keys() As String: Let Keys() = Split(Replace(Trim(strKeys), " ", " ", 1, -1, vbBinaryCompare), " ", -1, vbBinaryCompare) '' The extra replace allows for me seperating with one or two spaces - the following would do if I only used one space always Split(Trim(strKeys), " ", -1, vbBinaryCompare) ' this will be an array twice as big as the number of keys that we have ...... ' Column for this level sort , and Ascending or Descending - both determined from the supplied forth arguments and the column/ copy number
If (2 * CopyNo) > UBound(Keys()) + 1 Then Debug.Print "You need more than " & (UBound(Keys()) + 1) / 2 & " keys to complete sort": Exit Sub ' case we have less keys then we need to sort, are array has twice as many elements as we have supplied keys since we have a key and whether it needs to get bigger or smaller , and array is from 0 so must add 1 to ubound then half it get the key number we gave. We come here if the last column we gave as a Key had duplicates in it
'Dim GlLl As Long: If Keys((CopyNo * 2) - 1) = "Desc" Then Let GlLl = 1 ' (CopyNo * 2) - 1) gives as we go down levels 1 3 5 7 etc We're seeing if we had Desc for this column
Dim Clm As Long: Let Clm = CLng(Keys((CopyNo * 2) - 2)) ' ' (CopyNo * 2) - 2) gives as we go down levels 0 2 4 6 etc We are picking out the supplied column to sort by for each level
Rem 1 Bubble sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
' For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' THIS WOULD ONLY WORK FOR Copy No 1 For first row indicie to last but one row indicie - I could do this for copy 1
For rOuter = Left(Trim(strRws), InStr(1, Trim(strRws), " ", vbBinaryCompare) - 1) To Right(Trim(strRws), Len(Trim(strRws)) - InStrRev(Trim(strRws), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
'For rOuter = 1 To 5 ' For first run
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To Rs(UBound(Rs(), 1), 1) ' from just above left hand through all the rest
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Next rInner ' -----------------------------------------------------------------------
Next rOuter ' ================================================== ========================================

Rem 3 Preparation for possible recursion Call
' Catpains Blog
Debug.Print " Running Copy No. " & CopyNo & " of routine." & vbCr & vbLf & " Sorted rows " & strRws & " based on values in column " & Clm & vbCr & vbLf & " Checking now for Dups in that last sorted list" & vbCr & vbLf
Dim tempStr As String: Let tempStr = strRws ' Need this bodge because I set strRws="" below
Let strRws = ""
'For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' Only valis for first Copy No 1
For rOuter = Left(Trim(tempStr), InStr(1, Trim(tempStr), " ", vbBinaryCompare) - 1) To Right(Trim(tempStr), Len(Trim(tempStr)) - InStrRev(Trim(tempStr), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
If strRws = "" Or InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then Let strRws = " " & rOuter & " " ' case starting again to get duplicates
'If strRws = "" Or Trim(strRws) = rOuter - 1 Then Let strRws = " " & rOuter & " " ' alternative
If Trim(UCase(CStr(arsRef(rOuter, Clm)))) = Trim(UCase(CStr(arsRef(rOuter + 1, Clm)))) Then ' case in duplicate rows
Let strRws = strRws & rOuter + 1 & " " ' we building a list like " 4 5 6 " based on if the next is a duplicate value, which is determined by the last line
Else ' without the last condition met, we might have the end of a group duplicate rows, in which case it would be time to organise a recursion run so ..... we check for this situation needing a recursion run
If Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case we have at least 2 duplicates but have hit end of that list ( we have at least one space between indices, like " 3 4 " , " 6 7 8" etc.. ---- this , " 2 " , on the other hand, would would not have a space after trimming off the end spaces )
' Now its time to organise a recursion run
Debug.Print "Found dups in last list column " & Clm & ", " & strRws & " , so now main Rec Call " ' This is done for every duplicated
Call Bubbles(CopyNo + 1, arsRef(), strRws, strKeys) ' Rec Call 1 I need to sort the last duplicates
Let strRws = "" ' ready to try for another set of duplicates
Else
End If ' we did not have more than one indicie in strRws so usually that's it for this loop
End If
'+++*** this would be end of loop for most cases
' ...below section catches rows at the end that might need to be sorted. ......|
If rOuter = UBound(arsRef(), 1) - 1 And Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case of duplicates in last row
Debug.Print "Found dups in last rows of last list, so now Rec Call at end of loop (Dups at list end case)" ' loop end rec call - only done for duplicates at end of list
Call Bubbles(CopyNo + 1, arsRef(), strRws, strKeys)
Else
End If '... .................................................. ..............|
Next rOuter ' ************************************************** ************************
Debug.Print "Ending a copy, Copy level " & CopyNo & ""
End Sub

DocAElstein
03-17-2019, 02:22 PM
This intermadiate routine is simply Sub Bubbles(), with the name changed to Sub BubblesIndexIdeaWay(), and the two recursion Calling code lines changed from
Call Bubbles(CopyNo + 1, arsRef(), strRws, strKeys)
to
Call BubblesIndexIdeaWay(CopyNo + 1, arsRef(), strRws, strKeys)



'
Sub BubblesIndexIdeaWay(ByVal CpyNo As Long, ByRef arsRef() As Variant, ByVal strRws As String, ByVal strKeys As String)
Dim CopyNo As Long: Let CopyNo = CpyNo ' On every recurssion run this will be increased by the Rec Call. This will be a local variable indicating the level down in recursion - I increase it by 1 at every Rec Call, that is to say each Rec Call gets given CopyNo+1 - during a long tunnel down, the number at this pint will keep increasing to reflect how far down we are. This ensures we then have the correct value place at the start of any newly starting copy of the recursion routine, since the first copy of the recursion routine pauses and starts the second copy of the recursion routine, the second copy of the recursion routine pauses and starts the third copy of the recursion routine ….. etc…
If CopyNo = 1 Then Debug.Print "First procedure Call"
Rem -1 from the supplied arguments, get all data needed in current bubble sort
Dim Keys() As String: Let Keys() = Split(Replace(Trim(strKeys), " ", " ", 1, -1, vbBinaryCompare), " ", -1, vbBinaryCompare) '' The extra replace allows for me seperating with one or two spaces - the following would do if I only used one space always Split(Trim(strKeys), " ", -1, vbBinaryCompare) ' this will be an array twice as big as the number of keys that we have ...... ' Column for this level sort , and Ascending or Descending - both determined from the supplied forth arguments and the column/ copy number
If (2 * CopyNo) > UBound(Keys()) + 1 Then Debug.Print "You need more than " & (UBound(Keys()) + 1) / 2 & " keys to complete sort": Exit Sub ' case we have less keys then we need to sort, are array has twice as many elements as we have supplied keys since we have a key and whether it needs to get bigger or smaller , and array is from 0 so must add 1 to ubound then half it get the key number we gave. We come here if the last column we gave as a Key had duplicates in it
'Dim GlLl As Long: If Keys((CopyNo * 2) - 1) = "Desc" Then Let GlLl = 1 ' (CopyNo * 2) - 1) gives as we go down levels 1 3 5 7 etc We're seeing if we had Desc for this column
Dim Clm As Long: Let Clm = CLng(Keys((CopyNo * 2) - 2)) ' ' (CopyNo * 2) - 2) gives as we go down levels 0 2 4 6 etc We are picking out the supplied column to sort by for each level
Rem 1 Bubble sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
' For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' THIS WOULD ONLY WORK FOR Copy No 1 For first row indicie to last but one row indicie - I could do this for copy 1
For rOuter = Left(Trim(strRws), InStr(1, Trim(strRws), " ", vbBinaryCompare) - 1) To Right(Trim(strRws), Len(Trim(strRws)) - InStrRev(Trim(strRws), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
'For rOuter = 1 To 5 ' For first run
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To Rs(UBound(Rs(), 1), 1) ' from just above left hand through all the rest
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Dim Clms As Long '-------| with the condition met a loop is done for all columns in the array in which those two values used in the comparison are replaced at each column
For Clms = 1 To UBound(arsRef(), 2)
Let Temp = arsRef(rOuter, Clms): Let arsRef(rOuter, Clms) = arsRef(rInner, Clms): Let arsRef(rInner, Clms) = Temp
Next Clms '----------| for each column in the array at the two rows rOuter and rInner
Else
End If
Next rInner ' -----------------------------------------------------------------------
Next rOuter ' ================================================== ========================================

Rem 3 Preparation for possible recursion Call
' Catpains Blog
Debug.Print " Running Copy No. " & CopyNo & " of routine." & vbCr & vbLf & " Sorted rows " & strRws & " based on values in column " & Clm & vbCr & vbLf & " Checking now for Dups in that last sorted list" & vbCr & vbLf
Dim tempStr As String: Let tempStr = strRws ' Need this bodge because I set strRws="" below
Let strRws = ""
'For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' Only valis for first Copy No 1
For rOuter = Left(Trim(tempStr), InStr(1, Trim(tempStr), " ", vbBinaryCompare) - 1) To Right(Trim(tempStr), Len(Trim(tempStr)) - InStrRev(Trim(tempStr), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
If strRws = "" Or InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then Let strRws = " " & rOuter & " " ' case starting again to get duplicates
'If strRws = "" Or Trim(strRws) = rOuter - 1 Then Let strRws = " " & rOuter & " " ' alternative
If Trim(UCase(CStr(arsRef(rOuter, Clm)))) = Trim(UCase(CStr(arsRef(rOuter + 1, Clm)))) Then ' case in duplicate rows
Let strRws = strRws & rOuter + 1 & " " ' we building a list like " 4 5 6 " based on if the next is a duplicate value, which is determined by the last line
Else ' without the last condition met, we might have the end of a group duplicate rows, in which case it would be time to organise a recursion run so ..... we check for this situation needing a recursion run
If Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case we have at least 2 duplicates but have hit end of that list ( we have at least one space between indices, like " 3 4 " , " 6 7 8" etc.. ---- this , " 2 " , on the other hand, would would not have a space after trimming off the end spaces )
' Now its time to organise a recursion run
Debug.Print "Found dups in last list column " & Clm & ", " & strRws & " , so now main Rec Call " ' This is done for every duplicated
Call BubblesIndexIdeaWay(CopyNo + 1, arsRef(), strRws, strKeys) ' Rec Call 1 I need to sort the last duplicates
Let strRws = "" ' ready to try for another set of duplicates
Else
End If ' we did not have more than one indicie in strRws so usually that's it for this loop
End If
'+++*** this would be end of loop for most cases ... but Oh Fuck
'Oh Fuck' ...below section catches rows at the end that might need to be sorted. ......|
If rOuter = UBound(arsRef(), 1) - 1 And Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case of duplicates in last row
Debug.Print "Found dups in last rows of last list, so now Rec Call at end of loop (Dups at list end case)" ' loop end rec call - only done for duplicates at end of list
Call BubblesIndexIdeaWay(CopyNo + 1, arsRef(), strRws, strKeys)
Else
End If '... .................................................. ..............|
Next rOuter ' ************************************************** ************************
Debug.Print "Ending a copy, Copy level " & CopyNo & ""
End Sub

DocAElstein
03-17-2019, 02:59 PM
Original test data range , ( B11:E16 )

Row\Col
A
B
C
D
E

10


11
1
5
3a


12
9
9
9b


13
1
4
2c


14
8
8
8d


15
1
3
2e


16
7
7
7f
Worksheet: Sorting







Added initial row and column indicees

Row\Col
A
B
C
D
E

10
1
2
3
4


11
1
1
5
3a


12
2
9
9
9b


13
3
1
4
2c


14
4
8
8
8d


15
5
1
3
2e


16
6
7
7
7f
Worksheet: Sorting

DocAElstein
03-17-2019, 03:25 PM
Calling routine required for previous Post and following Post



Sub Call_Sub_BubblesIndexIdeaWay() ' Partially hard coded for ease of explanation
' data range info
Dim WsS As Worksheet: Set WsS = ThisWorkbook.Worksheets("Sorting")
Dim RngToSort As Range: Set RngToSort = WsS.Range("B11:E16")
' Set RngToSort = Selection ' ' Selection.JPG : https://imgur.com/HnCdBt8

Dim arrTS() As Variant ' This is somewhat redundant for this version and could be replaced by arrOrig()
Let arrTS() = RngToSort.Value
' Index idea variables
Let arrOrig() = arrTS()
Let arrIndx() = arrTS()
Let Cms() = Evaluate("=Column(A:D)") ' Convenient way to get
Let Rs() = Evaluate("=Row(1:6)") ' Initial row indicies
' Add initial indicies
Let RngToSort.Offset(-1, 0).Resize(1, 4).Value = Cms(): RngToSort.Offset(-1, 0).Resize(1, 4).Font.Color = vbRed
Let RngToSort.Offset(0, -1).Resize(6, 1).Value = Rs(): RngToSort.Offset(0, -1).Resize(6, 1).Font.Color = vbRed
' Initial row indicies from full original range´of rows
Dim strRows As String, Cnt As Long: Let strRows = " "
For Cnt = 1 To 6
Let strRows = strRows & Rs(Cnt, 1) & " "
Next Cnt
' we should have now strRows = " 1 2 3 4 5 6 "
Call BubblesIndexIdeaWay(1, arrIndx(), strRows, " 1 Asc 3 Asc 2 Asc ")
' Call BubblesIndexIdeaWay(1, arrIndx(), strRows, " 1 Asc ")
' Call BubblesIndexIdeaWay(1, arrIndx(), strRows, " 1 Asc 3 Asc ")
' Demo output
Dim RngDemoOutput As Range: Set RngDemoOutput = WsS.Range("B31").Resize(RngToSort.Rows.Count, RngToSort.Columns.Count)
' Let WsS.Range("B31").Resize(RngToSort.Rows.Count, RngToSort.Columns.Count).Value = arrIndx()
Let RngDemoOutput = arrIndx()
Let RngDemoOutput.Offset(-1, 0).Resize(1, 4).Value = Cms(): RngToSort.Offset(-1, 0).Resize(1, 4).Font.Color = vbRed
Let RngDemoOutput.Offset(0, -1).Resize(6, 1).Value = Rs(): RngToSort.Offset(0, -1).Resize(6, 1).Font.Color = vbRed
End Sub

DocAElstein
03-17-2019, 08:23 PM
Recursion routine for this post:
http://www.excelfox.com/forum/showthread.php/2307-VBA-Range-Sort-with-arrays-Alternative-for-simple-use?p=11078&viewfull=1#post11078



Sub BubblesIndexIdeaWay(ByVal CpyNo As Long, ByRef arsRef() As Variant, ByVal strRws As String, ByVal strKeys As String)
Dim CopyNo As Long: Let CopyNo = CpyNo ' On every recurssion run this will be increased by the Rec Call. This will be a local variable indicating the level down in recursion - I increase it by 1 at every Rec Call, that is to say each Rec Call gets given CopyNo+1 - during a long tunnel down, the number at this pint will keep increasing to reflect how far down we are. This ensures we then have the correct value place at the start of any newly starting copy of the recursion routine, since the first copy of the recursion routine pauses and starts the second copy of the recursion routine, the second copy of the recursion routine pauses and starts the third copy of the recursion routine ….. etc…
If CopyNo = 1 Then Debug.Print "First procedure Call"
Rem -1 from the supplied arguments, get all data needed in current bubble sort
Dim Keys() As String: Let Keys() = Split(Replace(Trim(strKeys), " ", " ", 1, -1, vbBinaryCompare), " ", -1, vbBinaryCompare) '' The extra replace allows for me seperating with one or two spaces - the following would do if I only used one space always Split(Trim(strKeys), " ", -1, vbBinaryCompare) ' this will be an array twice as big as the number of keys that we have ...... ' Column for this level sort , and Ascending or Descending - both determined from the supplied forth arguments and the column/ copy number
If (2 * CopyNo) > UBound(Keys()) + 1 Then Debug.Print "You need more than " & (UBound(Keys()) + 1) / 2 & " keys to complete sort": Exit Sub ' case we have less keys then we need to sort, are array has twice as many elements as we have supplied keys since we have a key and whether it needs to get bigger or smaller , and array is from 0 so must add 1 to ubound then half it get the key number we gave. We come here if the last column we gave as a Key had duplicates in it
'Dim GlLl As Long: If Keys((CopyNo * 2) - 1) = "Desc" Then Let GlLl = 1 ' (CopyNo * 2) - 1) gives as we go down levels 1 3 5 7 etc We're seeing if we had Desc for this column
Dim Clm As Long: Let Clm = CLng(Keys((CopyNo * 2) - 2)) ' ' (CopyNo * 2) - 2) gives as we go down levels 0 2 4 6 etc We are picking out the supplied column to sort by for each level
Rem 1 Bubble sort
Dim rOuter As Long ' ========"Left Hand"=====================Outer Loop=====================================
' For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' THIS WOULD ONLY WORK FOR Copy No 1 For first row indicie to last but one row indicie - I could do this for copy 1
For rOuter = Left(Trim(strRws), InStr(1, Trim(strRws), " ", vbBinaryCompare) - 1) To Right(Trim(strRws), Len(Trim(strRws)) - InStrRev(Trim(strRws), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
'For rOuter = 1 To 5 ' For first run
Dim rInner As Long ' -------Inner Loop-------------"Right Hand"--------------------------
For rInner = rOuter + 1 To Rs(UBound(Rs(), 1), 1) ' from just above left hand through all the rest
If CDbl(arsRef(rOuter, Clm)) > CDbl(arsRef(rInner, Clm)) Then
Dim Temp As Variant ' I want to Swap those 2 above - I cant easilly in any coding change two values simulataneosly. So one of them Element values will put in this temporary place. This Element Values will then be given the other. Finally the other Element will be given this temporary value
Let Temp = arrIndx(rOuter, Clm): Let arrIndx(rOuter, Clm) = arrIndx(rInner, Clm): Let arrIndx(rInner, Clm) = Temp
Dim TempRs As Long
Let TempRs = Rs(rOuter, 1): Let Rs(rOuter, 1) = Rs(rInner, 1): Let Rs(rInner, 1) = TempRs
Else
End If
Next rInner ' -----------------------------------------------------------------------
Next rOuter ' ==================End=Rem 1================================================= ==============
Rem 2
Let arrIndx() = Application.Index(arrOrig(), Rs(), Cms())
Rem 3 Preparation for possible recursion Call
' Catpains Blog
Debug.Print " Running Copy No. " & CopyNo & " of routine." & vbCr & vbLf & " Sorted rows " & strRws & " based on values in column " & Clm & vbCr & vbLf & " Checking now for Dups in that last sorted list" & vbCr & vbLf
Dim tempStr As String: Let tempStr = strRws ' Need this bodge because I set strRws="" below
Let strRws = ""
'For rOuter = Rs(LBound(Rs(), 1), 1) To Rs(UBound(Rs(), 1), 1) - 1 ' Only valis for first Copy No 1
For rOuter = Left(Trim(tempStr), InStr(1, Trim(tempStr), " ", vbBinaryCompare) - 1) To Right(Trim(tempStr), Len(Trim(tempStr)) - InStrRev(Trim(tempStr), " ", -1, vbBinaryCompare)) - 1 ' ImmediteWindowToHelpGetAtStuff.JPG : https://imgur.com/yGqmYSu : http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121
If strRws = "" Or InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then Let strRws = " " & rOuter & " " ' case starting again to get duplicates
'If strRws = "" Or Trim(strRws) = rOuter - 1 Then Let strRws = " " & rOuter & " " ' alternative
If Trim(UCase(CStr(arrIndx(rOuter, Clm)))) = Trim(UCase(CStr(arrIndx(rOuter + 1, Clm)))) Then ' case in duplicate rows
Let strRws = strRws & rOuter + 1 & " " ' we building a list like " 4 5 6 " based on if the next is a duplicate value, which is determined by the last line
Else ' without the last condition met, we might have the end of a group duplicate rows, in which case it would be time to organise a recursion run so ..... we check for this situation needing a recursion run
If Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case we have at least 2 duplicates but have hit end of that list ( we have at least one space between indices, like " 3 4 " , " 6 7 8" etc.. ---- this , " 2 " , on the other hand, would would not have a space after trimming off the end spaces )
' Now its time to organise a recursion run
Debug.Print "Found dups in last list column " & Clm & ", " & strRws & " , so now main Rec Call " ' This is done for every duplicated
Call BubblesIndexIdeaWay(CopyNo + 1, arrIndx(), strRws, strKeys) ' Rec Call 1 I need to sort the last duplicates
Let strRws = "" ' ready to try for another set of duplicates
Else
End If ' we did not have more than one indicie in strRws so usually that's it for this loop
End If
'+++*** this would be end of loop for most cases ... but Oh Fuck
'Oh Fuck' ...below section catches rows at the end that might need to be sorted. ......|
If rOuter = UBound(arrIndx(), 1) - 1 And Not InStr(1, Trim(strRws), " ", vbBinaryCompare) = 0 Then ' case of duplicates in last row
Debug.Print "Found dups in last rows of last list, so now Rec Call at end of loop (Dups at list end case)" ' loop end rec call - only done for duplicates at end of list
Call BubblesIndexIdeaWay(CopyNo + 1, arrIndx(), strRws, strKeys)
Else
End If '... .................................................. ..............|
Next rOuter ' ************************************************** ************************
Debug.Print "Ending a copy, Copy level " & CopyNo & ""
End Sub

DocAElstein
03-31-2019, 02:31 PM
Some notes , tests in support of this
https://www.excelforum.com/excel-programming-vba-macros/1270189-copy-worksheet-1-from-the-first-file-in-a-folder-then-delete-the-file.html
These are just some notes and tests into what order the Dir( with wild cards ) thing does stuff.


Introduction
VBA Dir Function thing ( https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dir-function )
In the simplest form, ….._
_____ Dir(Fullpath&FileName, __ )
_............

Dim IsFileName As String
IsFileName = Dir("C:\MyFolder\myFileName.xls", __ )
this basically gives you the file name back if it exists, based on you giving it the full path and File name string, Fullpath&FileName.
In the above example, if you had the file "myFileName.xls" in the foilder, "MyFolder", then the text "myFileName.xls" would be Placed in variable , IsFileName
If that file does not exist, then it gives you back nothing, or rather an empty string of sorts “” ( I believe Dir is a throw back to older early computer days, when you typed something like Dir C:_____, and the result was that you got to go to that place which Dir C:_____ represented )
It seem that in VBA the Dir is mostly used to loop through all files in a single folder*. ( *It does not suit too well for use in coding looking at all files in folders and sub folders ). The suitability of the Dir function for this is based on a couple of things.
_(i) In Microsoft Windows, Dir supports the use of multiple character (*) and single character (?) wildcards to specify multiple files. ......
You can use wild cards in the full path and file name string that you give it, so it will look for a file matching your given string. ( So typically you might give a string like “C:\myFolder\*.xl*”, which would look for any excel file: In this bit *.xl* , the first * allows for any file name, and the second * will allow for extensions such as .xls , .xlsm, .xlsx, .. etc… )
__Dir _____ without arguments
IsFileName = Dir
_(ii) After you use like Dir(Fullpath&FileName, __ ) once, then any use after of just _ Dir __ without any arguments, will give the next file it finds based on the criteria given by the wild carded full path and file name string you gave in the first use with arguments, or it returns "" if there are no further files meeting the criteria given by the wild carded full path and file name string you gave in the first use with arguments

What this post is about:
My interest was sparked by the reference thread ( https://www.excelforum.com/excel-programming-vba-macros/1270189-copy-worksheet-1-from-the-first-file-in-a-folder-then-delete-the-file.html )
I am interested in finding out which of the files Dir or Dir(Fullpath&FileName, __ )will choose if there are more than 1 file meeting the criteria of a string , Fullpath&FileName , containing wild cards



Experiments so far
I made a test folder , named "Folder"
Folder.JPG : https://imgur.com/l9OwlQi
2213

I created my files in this order
_1 “wbCodes.xlsm” --- the main file with all the codes in it. This is in the same Folder as the folder which I named "Folder" ( The main Folder is called “Kill Stuff” : Kill Stuff Folder.JPG : https://imgur.com/hN26AoW )
After making the main File, I created the folder, "Folder" , and created the following files in it. I created the following three files in the following order,
_2 “SecondFirstAfterwb.xlsx” --- made first after making “wbCodes.xlsm”
_3 “ThirdSecondAfterwb.xlsx” --- made second after making “wbCodes.xlsm”
_4 “AForthThirdAfterwb.xlsx” --- made third after making “wbCodes.xlsm”

I modified the codes from Alf and sintek from the referenced Thread, thus, ( I am mainly interested in the first part of the routines, as this deals with what the Dir chooses )


Sub zed369() ' sintek
Dim Path As String, File As String, Cnt As Long
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
' sintek's Dir Stuff
'Application.ScreenUpdating = False
Set wb1 = ThisWorkbook: Set ws1 = wb1.Sheets("Sheet1")
Path = ThisWorkbook.Path & "\Folder\": File = Dir(Path & "*.xl*") ' For this example, specific file is in a folder called Folder...same path as macro file...
Debug.Print "First got by Dir is " & File
Debug.Print
For Cnt = 1 To 3 - 1 ' -1 because we have three files, but typically the first is got from the first use of Dir , which is typically outside the loop
File = Dir: Debug.Print " use " & Cnt & " in loop of Dir gives " & File
Next Cnt
Debug.Print
Debug.Print


' sintek's way to do stuff
'Stop ' __________________________________________________ ___________________________
'Set wb2 = Workbooks.Open(Path & File): Set ws2 = wb2.Sheets("Tabelle1")
'With ws2
' .UsedRange.Copy ws1.Range("A1")
'End With
'wb2.Close
'Kill Path & File
'Application.ScreenUpdating = True
End Sub
'
Sub CopyAndKill() ' Alf
Dim aString As String, Cnt As Long, aStringToOpen As String
' Alf's Dir stuff
'aString = Dir("N:\a_test\")
aString = Dir("F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder\")
Debug.Print "First got by Dir is " & aString
aStringToOpen = "F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder\" & Dir("F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder\")
Debug.Print "First file will be opened using this string " & vbCrLf & aStringToOpen
Debug.Print
For Cnt = 1 To 3 - 1 ' -1 because we have three files, but typically the first is got from the first use of Dir , which is typically outside the loop
aString = Dir: Debug.Print " use " & Cnt & " in loop of Dir gives " & aString
Next Cnt
Debug.Print
Debug.Print


'Stop ' __________________________________________________ ________________
' Alf's way to do the stuff
'Workbooks.Open ("N:\a_test\" & Dir("N:\a_test\"))
'Sheets("Sheet1").Activate
'ActiveSheet.UsedRange.Copy
'ThisWorkbook.ActiveSheet.Range("A1").PasteSpecial Paste:=xlAll
'Application.CutCopyMode = False
'Windows(aString).Close
'Kill ("N:\a_test\" & Dir("N:\a_test\"))
End Sub

I get this sort of output ( in the immediate window )

First got by Dir is AForthThirdAfterwb.xlsx

use 1 in loop of Dir gives SecondFirstAfterwb.xlsx
use 2 in loop of Dir gives ThirdSecondAfterwb.xlsx


First got by Dir is AForthThirdAfterwb.xlsx
First file will be opened using this string
F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder\AForthThirdAfterwb.xlsx

use 1 in loop of Dir gives SecondFirstAfterwb.xlsx
use 2 in loop of Dir gives ThirdSecondAfterwb.xlsx
Initially it appears that I get alphabetic order.
But possibly there could be more to it than that.
I will look again at this in a few days , possibly on some other computers and systems, and experiment with various settings , etc….



In the next posts I will use this simplified routine which is only interested in looking at the order in which Dir chooses files.
Rem 1 gives a few ways to get the string up to and including the Folder in which files are to be searched for, ( in the form below , ‘1b ) , is used to get the folder named “Folder” in the same folder as the workbook in which the routine is placed )
Rem 2 : As before, an initial use of Dir(C:\somewhers\kjhfkhs.*sdfjkah,___) is made to set the search criteria, followed by the un argumented Dir in a loop which then looks for the next files


Sub DirOrder()
Dim strWB As String
Rem 1 get the full string, strWB, for a Folder to use in the Dir(Fullpath&FileName, __ ) ( strWB=Fullpath&FileName - FileName )
'1a) use the asking pop up thing, File dialogue folder picker
' With Application.FileDialog(msoFileDialogFolderPicker)
' .Title = "Folder Select"
' .AllowMultiSelect = False
' If .Show <> -1 Then
' Exit Sub
' Else
' End If
' Let strWB = .SelectedItems(1) ' & "\"
' End With
'
'1b) Using a test Folder, named Folder in the same Folder as the workbook in which this code is
Let strWB = ThisWorkbook.Path & "\Folder"
'1c) Hard code instead
'Let strWB = "F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder"
Debug.Print "Folder used is" & vbCrLf & strWB & vbCrLf & "" & Right(strWB, (Len(strWB) - InStrRev(strWB, "\", -1, vbTextCompare)))
Debug.Print
Let strWB = strWB & "\"
Rem 2 add last file bit for use in the Dir(Fullpath&FileName, __ ) , but include wild cards... http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11089&viewfull=1#post11089 : _(i) You can use wild cards in the full path and file name string that you give it, so it will look for a file matching your given string. ( So typically you might give a string like “C:\myFolder\*.xl*”, which would look for any excel file: In this bit *.xl* , the first * allows for any file name, and the second * will allow for extensions such as .xls , .xlsm, .xlsx, .. etc… ) _(ii) After you use like Dir(Fullpath&FileName, __ ) once, then any use after of just _ Dir __ without any arguments, will give the next file it finds based on the string you gave in the first use with arguments
'2a) Excel files
Let strWB = strWB & "*.xls*"
Dim file As String: Let file = Dir(strWB)
Debug.Print "First got by Dir(" & strWB & ")" & vbCrLf & "is " & file
Debug.Print
Dim Cnt As Long
For Cnt = 1 To 3 - 1 ' -1 because we have three files, but typically the first is got from the first use of Dir , which is typically outside the loop
file = Dir: Debug.Print "Use " & Cnt & " in loop of unargumented Dir gives " & file
Next Cnt
Debug.Print
Debug.Print
End Sub

This would be comparible output ( in the Immedite Window ( http://www.eileenslounge.com/viewtopic.php?f=27&t=16407&p=247121#p247121 ) ) to the test files anf folder used so far


Folder used is
F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder
Folder

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\Kill Stuff\Folder\*.xls*)
is AForthThirdAfterwb.xlsx

Use 1 in loop of unargumented Dir gives SecondFirstAfterwb.xlsx
Use 2 in loop of unargumented Dir gives ThirdSecondAfterwb.xlsx

And here is what it looks like in the explorer window:
ExpOrder1.JPG : https://imgur.com/OfQfHeH
2224

DocAElstein
04-02-2019, 03:16 PM
Here is where we left off in the last post

Folder used is
F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder
Folder

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\Kill Stuff\Folder\*.xls*)
is AForthThirdAfterwb.xlsx

Use 1 in loop of unargumented Dir gives SecondFirstAfterwb.xlsx
Use 2 in loop of unargumented Dir gives ThirdSecondAfterwb.xlsx
here is what it looks like in the explorer window:
ExpOrder1.JPG : https://imgur.com/OfQfHeH

I can move the order pysically in the explorer window, by selecting and dragging the file position virtically, ( and I hit the refresh thing , just in case that should influence anything )
ExpOrder2.JPG : https://imgur.com/AlV1MdB
The routine, Sub DirOrder() , then seems to give the same results

Folder used is
F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder
Folder

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\Kill Stuff\Folder\*.xls*)
is AForthThirdAfterwb.xlsx

Use 1 in loop of unargumented Dir gives SecondFirstAfterwb.xlsx
Use 2 in loop of unargumented Dir gives ThirdSecondAfterwb.xlsx

I can do this:
ExpOrder3a.JPG : https://imgur.com/RBSa9Ou
ExpOrder3a.JPG : https://imgur.com/2OVsguZ
Once again I get the same alphabetical ordering in the Dir found order output
i can play around with this:
ExpOrder4.JPG : https://imgur.com/6FbYQgp
or this
Stack by change date.jpg : https://imgur.com/YIrTxpp , https://imgur.com/ht887FU , https://imgur.com/lHMcUjA
2226
Once again I get the same alphabetical ordering in the Dir found order output

I made this d_xlsm_file.xlsm , and this ,c_xls_file.xls , and pit it in the foilder, Folder
A xlsm and xls.JPG : https://imgur.com/w9gyRxj
2225
here is part of my Immediate window output

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\Kill Stuff\Folder\*.xls*)
is AForthThirdAfterwb.xlsx

Use 1 in loop of unargumented Dir gives c_xls_file.xls
Use 2 in loop of unargumented Dir gives d_xlsm_file.xlsm
I need to increase my loop count, Cnt , to 4 to getting total all 5 files. But doing this is likely to get a bit tedious as I comtinue experiments with a different number of files in various folders. So I will change my coding, at the loop section, to a more typical type of loop used iin such a Dir __ file finding code: Usually something like this is done, so that the loop keeps going as long as Dir __ finds files


‘ First use of Dir with full path and file name argument
‘ strWB = "F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder\*.xls*" ‘ Wild card to get all Excel Files
‘ File = Dir(strWB)


‘ Loop for all files meeting search string criteria, ( all Excel files in this example )
Do ' '_- I want to keep going in a Loop while I still get a file name returned by Dir
Dim Cnt As Long: Let Cnt = Cnt + 1
File = Dir: Debug.Print "Use " & Cnt & " in loop of unargumented Dir gives """ & File & """"
Loop While File <> "" '_- I want to keep going in a Loop while I still get a file name returned by Dir
Here is the full coding, http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11108&viewfull=1#post11108 , which gives for the last example:

F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder
Folder

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\Kill Stuff\Folder\*.xls*)
is AForthThirdAfterwb.xlsx

Use 1 in loop of unargumented Dir gives "c_xls_file.xls"
Use 2 in loop of unargumented Dir gives "d_xlsm_file.xlsm"
Use 3 in loop of unargumented Dir gives "SecondFirstAfterwb.xlsx"
Use 4 in loop of unargumented Dir gives "ThirdSecondAfterwb.xlsx"
Use 5 in loop of unargumented Dir gives ""

I can change the serach criteria from strWB & "*.xls*" to strWB & "*" and it has no effect
i added a .jpg pic, ( Add a jpg.JPG : https://imgur.com/XkXskiL ) , and the listing had it in the aplhabetical order :

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\Kill Stuff\Folder\*)
is AForthThirdAfterwb.xlsx

Use 1 in loop of unargumented Dir gives "c_xls_file.xls"
Use 2 in loop of unargumented Dir gives "d_xlsm_file.xlsm"
Use 3 in loop of unargumented Dir gives "SecondFirstAfterwb.xlsx"
Use 4 in loop of unargumented Dir gives "Stack by change date .JPG"
Use 5 in loop of unargumented Dir gives "ThirdSecondAfterwb.xlsx"
Use 6 in loop of unargumented Dir gives ""
I use the last routine in the form to allow user selection of the folder to search for files
http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11108&viewfull=1#post11108. I looked at some arbritrary folders, - once again alphabetical order seems to come out:

Folder used is
F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery
wbSheetMakerClsdWbADOMsQueery

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\*)
is 83DB8900

Use 1 in loop of unargumented Dir gives "aaa.xlsm"
Use 2 in loop of unargumented Dir gives "Amar321.xls.xlsx"
Use 3 in loop of unargumented Dir gives "ApparantlyApparantIs_Change.JPG"
Use 4 in loop of unargumented Dir gives "Aufzeichnen.JPG"
Use 5 in loop of unargumented Dir gives "Book1.xls"
Use 6 in loop of unargumented Dir gives "Book1.xlsm.zip"
Use 7 in loop of unargumented Dir gives "CA930CD8.tmp"
Use 8 in loop of unargumented Dir gives "ClosedWorkbook.xlsm"
Use 9 in loop of unargumented Dir gives "CopyASheet.JPG"
Use 10 in loop of unargumented Dir gives "CresssieFiles.JPG"
Use 11 in loop of unargumented Dir gives "DB2IssJfürELProAbDec2014.xlsm"
Use 12 in loop of unargumented Dir gives "EFFldr.xlsm"
Use 13 in loop of unargumented Dir gives "EFldr1_1 Download.JPG"
Use 14 in loop of unargumented Dir gives "Eileens Fldr.zip"
Use 15 in loop of unargumented Dir gives "EileensFldr Contents Copy.JPG"
Use 16 in loop of unargumented Dir gives "EileensFldr Contents Paste.JPG"
Use 17 in loop of unargumented Dir gives "EileensFldr Make Empty Folder.JPG"
Use 18 in loop of unargumented Dir gives "EileensFldr zip Download.JPG"
Use 19 in loop of unargumented Dir gives "EileensFldr.zip"
Use 20 in loop of unargumented Dir gives "EileensFolderExplainedOutput.JPG"
Use 21 in loop of unargumented Dir gives "Example Folder and Macro File in same Folder.JPG"
Use 22 in loop of unargumented Dir gives "FBandData.xlsm"
Use 23 in loop of unargumented Dir gives "FBandDataNorie.xlsm"
Use 24 in loop of unargumented Dir gives "FBandDataNorie.xlsx"
Use 25 in loop of unargumented Dir gives "FormulaBarClosedWB.JPG"
Use 26 in loop of unargumented Dir gives "GetData_ClosedBook+LINKS.xlsx"
Use 27 in loop of unargumented Dir gives "GetData_ClosedBook.xls"
Use 28 in loop of unargumented Dir gives "HimanshuktwCode.JPG"
Use 29 in loop of unargumented Dir gives "KissMyClosedWB.JPG"
Use 30 in loop of unargumented Dir gives "Mappe2.xlsm"
Use 31 in loop of unargumented Dir gives "MazanDikCollectionWonk.xlsm"
Use 32 in loop of unargumented Dir gives "mellowtangSummarySheets.xlsm"
Use 33 in loop of unargumented Dir gives "MsQueerOptions.JPG"
Use 34 in loop of unargumented Dir gives "myFileToClose.xlsm"
Use 35 in loop of unargumented Dir gives "MyNewWorkbook.xlsx"
Use 36 in loop of unargumented Dir gives "MySameFolder.JPG"
Use 37 in loop of unargumented Dir gives "NeuProAktuelleMakros.xlsm"
Use 38 in loop of unargumented Dir gives "NormalThisWorkbookCodeModule.JPG"
Use 39 in loop of unargumented Dir gives "NutritionalValues2016.xlsx"
Use 40 in loop of unargumented Dir gives "OnlyGets8810RowsInAQuerrListObjectTableThingyAnywa ys.JPG"
Use 41 in loop of unargumented Dir gives "Plop.xlsm"
Use 42 in loop of unargumented Dir gives "poo.xlsm"
Use 43 in loop of unargumented Dir gives "RudyMSRAllSubFldrsFndRep.xlsm"
Use 44 in loop of unargumented Dir gives "Sample.zip"
Use 45 in loop of unargumented Dir gives "SchemaIniErrorPipe.JPG"
Use 46 in loop of unargumented Dir gives "SrangeThisWorkbookCodeModule.JPG"
Use 47 in loop of unargumented Dir gives "StopClosing.xlsm"
Use 48 in loop of unargumented Dir gives "Summary sheet.xlsm"
Use 49 in loop of unargumented Dir gives "template test.xlsm"
Use 50 in loop of unargumented Dir gives "Top100MsQuery.JPG"
Use 51 in loop of unargumented Dir gives "ViskasVerticalsMaster dataMjoza.xlsm"
Use 52 in loop of unargumented Dir gives "wb2.csv"
Use 53 in loop of unargumented Dir gives "wb2.xlsm"
Use 54 in loop of unargumented Dir gives "wb2.xlsx"
Use 55 in loop of unargumented Dir gives "WBAccessTimeTestData.xlsx"
Use 56 in loop of unargumented Dir gives "WBAccestTimeTest.xlsm"
Use 57 in loop of unargumented Dir gives "wbCodes.xlsb"
Use 58 in loop of unargumented Dir gives "wbCodes.xlsm"
Use 59 in loop of unargumented Dir gives "WBOpenRenameKlaredog.xls"
Use 60 in loop of unargumented Dir gives "WBOpenRenameKlaredog.xlsm"
Use 61 in loop of unargumented Dir gives "Wb_with_5Sheets_4Worksheets.xlsm"
Use 62 in loop of unargumented Dir gives "WillyWonks.JPG"
Use 63 in loop of unargumented Dir gives "workbook2.xlsm"
Use 64 in loop of unargumented Dir gives "WorkbookOpenMsgBox.JPG"
Use 65 in loop of unargumented Dir gives "WorksheetNames.JPG"
Use 66 in loop of unargumented Dir gives "Worksheet_Change.JPG"
Use 67 in loop of unargumented Dir gives ""
Note that a file named as a number comes first in the list, as is consitant with Excel regarding text as "larger" than a number in sorting things http://www.eileenslounge.com/viewtopic.php?f=27&t=32154#p249178

Up until now, all tests were done on an old Lap top using Vista operating system. I rechecked on a newer machine uisng Windows 7. I get the same results












"wbCodes.xlsm" : https://app.box.com/s/gfuintgifu1hgw5nap3jriz2x8mp911x ( Sub DirOrder() is here )
folder, "Folder" : https://app.box.com/s/vmmzeboetkt07ocggbx6p8lkurmp5wca
"wbCodes.xls" : https://app.box.com/s/gmdne53vehhuc6lvz3vfgyxqmwy07xlz ( Sub DirOrder() is here )

DocAElstein
04-02-2019, 03:17 PM
There is a second argument to Dir. It is not used much. https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dir-function#settings
One option will make it return folder names as well. For our example we can change Dir(strWB) to any if these: Dir(strWB, vbDirectory) ; Dir(PathName:=strWB, Attributes:=vbDirectory) ; Dir(PathName:=strWB, Attributes:=16) ; Dir(strWB, 16)
Running the routine with the previous example, seems to slip the folder names in the appropriate place to once again have everything in alphabetical order

Folder used is
F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery
wbSheetMakerClsdWbADOMsQueery

First got by Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMaker ClsdWbADOMsQueery\*)
is .

Use 1 in loop of unargumented Dir gives ".."
Use 2 in loop of unargumented Dir gives "83DB8900"
Use 3 in loop of unargumented Dir gives "aaa.xlsm"
Use 4 in loop of unargumented Dir gives "ACDC"
Use 5 in loop of unargumented Dir gives "Amar321.xls.xlsx"
Use 6 in loop of unargumented Dir gives "ApparantlyApparantIs_Change.JPG"
Use 7 in loop of unargumented Dir gives "Aufzeichnen.JPG"
Use 8 in loop of unargumented Dir gives "Bad Files"
Use 9 in loop of unargumented Dir gives "Book1.xls"
Use 10 in loop of unargumented Dir gives "Book1.xlsm.zip"
Use 11 in loop of unargumented Dir gives "CA930CD8.tmp"
Use 12 in loop of unargumented Dir gives "ClosedWorkbook.xlsm"
Use 13 in loop of unargumented Dir gives "ClsdWbs"
Use 14 in loop of unargumented Dir gives "CopyASheet.JPG"
Use 15 in loop of unargumented Dir gives "CressieFolder"
Use 16 in loop of unargumented Dir gives "CresssieFiles.JPG"
Use 17 in loop of unargumented Dir gives "DB2IssJfürELProAbDec2014.xlsm"
Use 18 in loop of unargumented Dir gives "EFFldr.xlsm"
Use 19 in loop of unargumented Dir gives "EFldr1_1"
Use 20 in loop of unargumented Dir gives "EFldr1_1 Download.JPG"
Use 21 in loop of unargumented Dir gives "Eileens Fldr.zip"
Use 22 in loop of unargumented Dir gives "EileensFldr"
Use 23 in loop of unargumented Dir gives "EileensFldr Contents Copy.JPG"
Use 24 in loop of unargumented Dir gives "EileensFldr Contents Paste.JPG"
Use 25 in loop of unargumented Dir gives "EileensFldr Make Empty Folder.JPG"
Use 26 in loop of unargumented Dir gives "EileensFldr zip Download.JPG"
Use 27 in loop of unargumented Dir gives "EileensFldr.zip"
Use 28 in loop of unargumented Dir gives "EileensFolderExplainedOutput.JPG"
Use 29 in loop of unargumented Dir gives "Example Folder and Macro File in same Folder.JPG"
Use 30 in loop of unargumented Dir gives "FBandData.xlsm"
Use 31 in loop of unargumented Dir gives "FBandDataNorie.xlsm"
Use 32 in loop of unargumented Dir gives "FBandDataNorie.xlsx"
Use 33 in loop of unargumented Dir gives "FormulaBarClosedWB.JPG"
Use 34 in loop of unargumented Dir gives "GetData_ClosedBook+LINKS.xlsx"
Use 35 in loop of unargumented Dir gives "GetData_ClosedBook.xls"
Use 36 in loop of unargumented Dir gives "HimanshuktwCode.JPG"
Use 37 in loop of unargumented Dir gives "Kill Stuff"
Use 38 in loop of unargumented Dir gives "KissMyClosedWB.JPG"
Use 39 in loop of unargumented Dir gives "MacroRecording"
Use 40 in loop of unargumented Dir gives "Mappe2.xlsm"
Use 41 in loop of unargumented Dir gives "MazanDikCollectionWonk.xlsm"
Use 42 in loop of unargumented Dir gives "mellowtangSummarySheets.xlsm"
Use 43 in loop of unargumented Dir gives "MsQueerOptions.JPG"
Use 44 in loop of unargumented Dir gives "MsQueeryADO"
Use 45 in loop of unargumented Dir gives "myFileToClose.xlsm"
Use 46 in loop of unargumented Dir gives "MyNewWorkbook.xlsx"
Use 47 in loop of unargumented Dir gives "MySameFolder.JPG"
Use 48 in loop of unargumented Dir gives "Neuer Ordner"
Use 49 in loop of unargumented Dir gives "NeuProAktuelleMakros.xlsm"
Use 50 in loop of unargumented Dir gives "NormalThisWorkbookCodeModule.JPG"
Use 51 in loop of unargumented Dir gives "NutritionalValues2016.xlsx"
Use 52 in loop of unargumented Dir gives "OnlyGets8810RowsInAQuerrListObjectTableThingyAnywa ys.JPG"
Use 53 in loop of unargumented Dir gives "Plop.xlsm"
Use 54 in loop of unargumented Dir gives "poo.xlsm"
Use 55 in loop of unargumented Dir gives "RudyMSRAllSubFldrsFndRep.xlsm"
Use 56 in loop of unargumented Dir gives "Sample.zip"
Use 57 in loop of unargumented Dir gives "SchemaIniErrorPipe.JPG"
Use 58 in loop of unargumented Dir gives "SrangeThisWorkbookCodeModule.JPG"
Use 59 in loop of unargumented Dir gives "StopClosing.xlsm"
Use 60 in loop of unargumented Dir gives "Summary sheet.xlsm"
Use 61 in loop of unargumented Dir gives "template test.xlsm"
Use 62 in loop of unargumented Dir gives "Top100MsQuery.JPG"
Use 63 in loop of unargumented Dir gives "ViskasVerticalsMaster dataMjoza.xlsm"
Use 64 in loop of unargumented Dir gives "wb2.csv"
Use 65 in loop of unargumented Dir gives "wb2.xlsm"
Use 66 in loop of unargumented Dir gives "wb2.xlsx"
Use 67 in loop of unargumented Dir gives "WBAccessTimeTestData.xlsx"
Use 68 in loop of unargumented Dir gives "WBAccestTimeTest.xlsm"
Use 69 in loop of unargumented Dir gives "wbCodes.xls"
Use 70 in loop of unargumented Dir gives "wbCodes.xlsb"
Use 71 in loop of unargumented Dir gives "wbCodes.xlsm"
Use 72 in loop of unargumented Dir gives "WBOpenRenameKlaredog.xls"
Use 73 in loop of unargumented Dir gives "WBOpenRenameKlaredog.xlsm"
Use 74 in loop of unargumented Dir gives "Wb_with_5Sheets_4Worksheets.xlsm"
Use 75 in loop of unargumented Dir gives "WillyWonks.JPG"
Use 76 in loop of unargumented Dir gives "WonkBook"
Use 77 in loop of unargumented Dir gives "workbook2.xlsm"
Use 78 in loop of unargumented Dir gives "WorkbookOpenMsgBox.JPG"
Use 79 in loop of unargumented Dir gives "WorksheetNames.JPG"
Use 80 in loop of unargumented Dir gives "Worksheet_Change.JPG"
Use 81 in loop of unargumented Dir gives "XYT"
Use 82 in loop of unargumented Dir gives ""
Here is the folder used for the last two tests: wbFolder.JPG : https://imgur.com/MMydq7n

DocAElstein
04-02-2019, 03:19 PM
In support of answer to this excelfox Thread:
http://www.excelfox.com/forum/showthread.php/2322-How-to-populate-the-column-3-under-this-condition?p=11090&viewfull=1#post11090



Option Explicit
Sub DefaultItem()
Rem 1 data range info
Dim rngIn As Range, Lr As Long, ClmCnt As Long
Let ClmCnt = 3 ' : Let ClmCnt = Worksheets("Sheet2").Range("A1").CurrentRegion.Columns.Count
Let Lr = Worksheets("Sheet2").Range("A1").CurrentRegion.Rows.Count
Set rngIn = Worksheets("Sheet2").Range("A1:C" & Lr & "")
Rem 2 Data to array
Dim arrDtaIn() As Variant ' I need Variant type as the .Value in the next line returns a field of Variant type elements
Let arrDtaIn() = rngIn.Value
Rem 3 Determine default values
' 3a) Number of groups
Dim arrGp() As Variant: Let arrGp() = Application.Index(rngIn, 0, 1).Value ' http://www.excelfox.com/forum/showthread.php/1111-VBA-Trick-of-the-Week-Slicing-an-Array-Without-Loop-%E2%80%93-Application-Index Highlight arrGp and Hit F9.JPG : https://imgur.com/PZF0oXE
Dim strGps As String: Let strGps = " " ' For a string like " 1 2 3 "
Dim cnt As Long
For cnt = 2 To Lr ' looking at all rows from the second in our input data
If InStr(1, strGps, " " & arrGp(cnt, 1) & " ") = 0 Then ' This looks for the positiopn along ( starting from character 1 , in strGps , of each row element arrGp(cnt, 1) ) if it is not found then Instr retourns 0 as a n indication that it was not there
Let strGps = strGps & arrGp(cnt, 1) & " " ' Because it is not there, we now put it in
Else
End If
Next cnt
' At this point we should have like strGps = " 1 2 3 "
' 3b) Array of unique groups
Let strGps = Trim(strGps) ' This takes off the first and last trailing spaces
Dim arrGps() As String ' The string split function below returns a fiels of String elements : Highlight arrGps Hit F9.JPG : https://imgur.com/LT9dgHk
Let arrGps() = Split(strGps, " ", -1, vbBinaryCompare) ' this splits the ( strgps , using " " as denominator , and returns all elemants in an array, using exact binary computer match on the " " )
' 3c) Array for output
Dim arrOut() As String ' A dynamic array is needed as I can only use variables in the ReDim method - I cannot use varable in the declaration (Dim) statement
ReDim arrOut(1 To UBound(arrGps()) + 2, 1 To 2) ' I want +1 rows for the header I also need +1 because split retouns a 1 dimensional array stating at indicie 0 - so the Ubound of arrGps() will give a numbe 1 less than I might expect - in our example we have 3 elements with indicies of 0 1 2, ( and values in our example of 1 2 3 - for example arrGps(0)=1 ) so the Ubound returns 2 - but we want 3 elements
' 3d) fill my arrOut()
Dim Stear As Variant ' I want to use a For ´Each loop below VBA must have an object varaible or a variable of variant type to hold each item in a collection of something. Our arrGps() can be considered a collection of numbers 1 2 3
Dim ArrOutRw As Long: Let ArrOutRw = 1 ' Our row number in the outout array : I use 1 initially, for the header
Let arrOut(ArrOutRw, 1) = arrDtaIn(1, 1): Let arrOut(ArrOutRw, 2) = "Deafault item"
For Each Stear In arrGps() ' This outer loop goes throug each unique group number =============== - For each number in { 1, 2, 3 }
For cnt = 2 To Lr ' An Inner loop to go through all data rows ' -----------------------------
If CStr(arrDtaIn(cnt, 1)) = CStr(Stear) Then ' This will catch the first use of our group number, Stear is our group number taken from the array 1 2 3
Let ArrOutRw = ArrOutRw + 1 ' Our next row to fill in arrOut()
Let arrOut(ArrOutRw, 1) = Stear ' First column in our output array
Let arrOut(ArrOutRw, 2) = arrDtaIn(cnt, 2) ' Second column in our output array will be given the first item in column B of our data for this group number, Stear
Exit For ' I only want to get the first item for a group number
Else
End If
Next cnt ' ----------------------------------------------------------------------------------
Next Stear ' ================================================== ==================================
' at this point we have an array for output of default : Select ArrOut then Hit F9.JPG : https://imgur.com/CNMeYV9
Rem 4 Demo Output
Let rngIn.Offset(0, ClmCnt).Resize(UBound(arrOut(), 1), 2).Value = arrOut() ' In the range which offset to the right of the input, of the dimension size of the output array, I paste my values out

End Sub

DocAElstein
04-06-2019, 01:15 PM
Coding in suport of these excelfox Threads and posts:
http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11089&viewfull=1#post11089
https://www.excelforum.com/excel-programming-vba-macros/1270189-copy-worksheet-1-from-the-first-file-in-a-folder-then-delete-the-file.html


Sub DirOrder() ' http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11092&viewfull=1#post11092
Dim strWB As String
Rem 1 get the full string, strWB, for a Folder to use in the Dir(Fullpath&FileName, __ ) ( strWB=Fullpath&FileName - FileName )
'1a) use the asking pop up thing, File dialogue folder picker
' With Application.FileDialog(msoFileDialogFolderPicker)
' .Title = "Folder Select"
' .AllowMultiSelect = False
' If .Show <> -1 Then
' Exit Sub
' Else
' End If
' Let strWB = .SelectedItems(1) ' & "\"
' End With
'
'1b) Using a test Folder, named Folder in the same Folder as the workbook in which this code is
Let strWB = ThisWorkbook.Path & "\Folder"
'1c) Hard code instead
'Let strWB = "F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder"
Debug.Print "Folder used is" & vbCrLf & strWB & vbCrLf & "" & Right(strWB, (Len(strWB) - InStrRev(strWB, "\", -1, vbTextCompare)))
Debug.Print
Let strWB = strWB & "\"
Rem 2 add last file bit for use in the Dir(Fullpath&FileName, __ ) , but include wild cards... http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11089&viewfull=1#post11089 : _(i) You can use wild cards in the full path and file name string that you give it, so it will look for a file matching your given string. ( So typically you might give a string like “C:\myFolder\*.xl*”, which would look for any excel file: In this bit *.xl* , the first * allows for any file name, and the second * will allow for extensions such as .xls , .xlsm, .xlsx, .. etc… ) _(ii) After you use like Dir(Fullpath&FileName, __ ) once, then any use after of just _ Dir __ without any arguments, will give the next file it finds based on the string you gave in the first use with arguments
'2a) Excel files
Let strWB = strWB & "*.xls*"
Dim File As String: Let File = Dir(strWB)
Debug.Print "First got by Dir(" & strWB & ")" & vbCrLf & "is " & File
Debug.Print
Do ' '_- I want to keep going in a Loop while I still get a file name returned by Dir
Dim Cnt As Long: Let Cnt = Cnt + 1
Let File = Dir: Debug.Print "Use " & Cnt & " in loop of unargumented Dir gives """ & File & """"
Loop While File <> "" '_- I want to keep going in a Loop while I still get a file name returned by Dir
Debug.Print
Debug.Print
End Sub


Here last routine in form to allow user selection of folder to search for files

Sub DirOrder() ' http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11093&viewfull=1#post11093
Dim strWB As String
Rem 1 get the full string, strWB, for a Folder to use in the Dir(Fullpath&FileName, __ ) ( strWB=Fullpath&FileName - FileName )
'1a) use the asking pop up thing, File dialogue folder picker
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Folder Select"
.AllowMultiSelect = False
If .Show <> -1 Then
Exit Sub
Else
End If
Let strWB = .SelectedItems(1) ' & "\"
End With

'1b) Using a test Folder, named Folder in the same Folder as the workbook in which this code is
'Let strWB = ThisWorkbook.Path & "\Folder"
'1c) Hard code instead
'Let strWB = "F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsd WbADOMsQueery\Kill Stuff\Folder"
Debug.Print "Folder used is" & vbCrLf & strWB & vbCrLf & "" & Right(strWB, (Len(strWB) - InStrRev(strWB, "\", -1, vbTextCompare)))
Debug.Print
Let strWB = strWB & "\"
Rem 2 add last file bit for use in the Dir(Fullpath&FileName, __ ) , but include wild cards... http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11089&viewfull=1#post11089 : _(i) You can use wild cards in the full path and file name string that you give it, so it will look for a file matching your given string. ( So typically you might give a string like “C:\myFolder\*.xl*”, which would look for any excel file: In this bit *.xl* , the first * allows for any file name, and the second * will allow for extensions such as .xls , .xlsm, .xlsx, .. etc… ) _(ii) After you use like Dir(Fullpath&FileName, __ ) once, then any use after of just _ Dir __ without any arguments, will give the next file it finds based on the string you gave in the first use with arguments
'2a) Excel files
Let strWB = strWB & "*"
Dim File As String: Let File = Dir(strWB)
Debug.Print "First got by Dir(" & strWB & ")" & vbCrLf & "is " & File
Debug.Print
Do ' '_- I want to keep going in a Loop while I still get a file name returned by Dir
Dim Cnt As Long: Let Cnt = Cnt + 1
Let File = Dir: Debug.Print "Use " & Cnt & " in loop of unargumented Dir gives """ & File & """"
Loop While File <> "" '_- I want to keep going in a Loop while I still get a file name returned by Dir
Debug.Print
Debug.Print
End Sub

DocAElstein
04-20-2019, 03:10 PM
Initial coding for solution to this Thread
http://www.excelfox.com/forum/showthread.php/2330-Fill-Column-Based-on-Actual-Time?p=11124&viewfull=1#post11124


File : "Data Sheet.xls" : https://app.box.com/s/wvusyk3ish5z3mxdwvw3sw9n683m58rq


Option Explicit '
Sub HaiderAdSlots1() ' http://www.excelfox.com/forum/showthread.php/2330-Fill-Column-Based-on-Actual-Time?p=11124&viewfull=1#post11124
Rem 1 Worksheets info
Dim Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = ThisWorkbook.Worksheets("Sheet1"): Set Ws2 = ThisWorkbook.Worksheets("Sheet2")
Dim Lr1 As Long, Lr2 As Long
Let Lr1 = Ws1.Range("A" & Ws1.Range("A" & Ws1.Rows.Count & "").End(xlUp).Row & "").Row: Let Lr2 = Ws1.Range("A" & Ws2.Range("A" & Ws2.Rows.Count & "").End(xlUp).Row & "").Row
'1b) data arrays, original data
Dim arrInSht2() As Variant, arrOutSht1() As Variant
Let arrInSht2() = Ws2.Range("A1:G" & Lr2 & "").Value2: Let arrOutSht1() = Ws1.Range("A1:C" & Lr1 & "").Value2
'1b)(ii) extra "column" for outout
ReDim Preserve arrOutSht1(1 To Lr1, 1 To 4) ' we may add a last dimension, but must keep the others the same as they were
Rem 2 arrays to identify rows ... " Channel Name & Date & Time "
Dim arrInId() As String
ReDim arrInId(1 To Lr2)
Dim cnt As Long
For cnt = 2 To Lr2
Let arrInId(cnt) = arrInSht2(cnt, 1) & " | " & arrInSht2(cnt, 2) & " | " & arrInSht2(cnt, 3)
Next cnt
Dim arrOutId() As String
ReDim arrOutId(1 To Lr1)
For cnt = 2 To Lr1
Let arrOutId(cnt) = arrOutSht1(cnt, 2) & " | " & arrOutSht1(cnt, 1) & " | " & arrOutSht1(cnt, 3)
Next cnt
Rem 3 match up rows in data sheets
For cnt = 2 To Lr1
Dim MtchRes As Variant
Let MtchRes = Application.Match(arrOutId(cnt), arrInId(), 1) ' return the position along of a match ( looking for arrOutId(cnt) , in arrInId() , 1 indicates approximate match )
If Not IsError(MtchRes) Then
'3b)
Let arrOutSht1(cnt, 4) = arrInSht2(MtchRes, 3)
Else
End If
Next cnt
Rem 4
Let ThisWorkbook.Worksheets("OutputTest").Range("A1").Resize(UBound(arrOutSht1(), 1), 4).Value = arrOutSht1()

End Sub

DocAElstein
04-21-2019, 03:06 PM
In support of answer to this Thread
http://www.excelfox.com/forum/showthread.php/2331-Use-VBA-to-automate-entry-of-schedule-scores

_____ Workbook: NFL 2019 Schedule.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S

1
Week # 1


09.08.19



2V TeamGBLARWASBUFATLBALKCTENINDCINSFNYGDETPITHOUDEN
TOTAL


3V Score
















0


4H Score



















5H TeamCHICARPHINYJMINMIAJAXCLELACSEATBDALARINENOOAK


6BYES


7


8
Week # 2


09.15.19



9V TeamTBARIDALINDSEABUFSFLACMINJAXNEKCNOCHIPHICLE


10V Score
















0


11H Score



















12H TeamCARBALWASTENPITNYGCINDETGBHOUMIAOAKLARDENATLNY J


13BYES


14
Worksheet: 2019


_____ Workbook: NFL 2019 Schedule.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S

1
Week # 1


09.08.19



2V TeamGBLARWASBUFATLBALKCTENINDCINSFNYGDETPITHOUDEN
TOTAL


3V Score
















=SUM(B3:Q4)


4H Score



















5H TeamCHICARPHINYJMINMIAJAXCLELACSEATBDALARINENOOAK


6BYES


7


8
Week # 2


09.15.19



9V TeamTBARIDALINDSEABUFSFLACMINJAXNEKCNOCHIPHICLE


10V Score
















=SUM(B10:Q11)


11H Score



















12H TeamCARBALWASTENPITNYGCINDETGBHOUMIAOAKLARDENATLNY J


13BYES


14
Worksheet: 2019

DocAElstein
04-24-2019, 11:34 AM
In support of this thread
http://www.excelfox.com/forum/showthread.php/2330-Fill-Column-Based-on-Actual-Time?p=11134&viewfull=1#post11134

Sheet2v3.JPG : 2245

_____ Workbook: Data Sheet v3.xls ( Using Excel 2007 32 bit )
Row\ColABCDEFG
1ChannelDateAdStartMidBreakBreak_StartBreak_EndHou r

2A NEWS15.11.201720:19:12Mid Break-120:19:0820:24:0720

3A NEWS15.11.201720:19:32Mid Break-120:19:0820:24:0720

4A NEWS15.11.201720:19:49Mid Break-120:19:0820:24:0720

5A NEWS15.11.201720:20:01Mid Break-120:19:0820:24:0720

6A NEWS15.11.201720:20:47Mid Break-120:19:0820:24:0720

7A NEWS15.11.201720:21:10Mid Break-120:19:0820:24:0720

8A NEWS15.11.201720:21:20Mid Break-120:19:0820:24:0720

42A NEWS15.11.201720:58:16Casual20:57:1420:59:5720

43A NEWS15.11.201720:58:33Casual20:57:1420:59:5720

44A NEWS15.11.201720:58:42Casual20:57:1420:59:5720

45A NEWS15.11.201720:59:01Casual20:57:1420:59:5720

46A NEWS15.11.201722:26:58Mid Break-122:26:5422:33:5522
Worksheet: Sheet2v3

_......... continued in next posts due to post size limitations ( 10,000 characters incl. BB code )

DocAElstein
04-24-2019, 11:36 AM
_____ Workbook: Data Sheet v3.xls ( Using Excel 2007 32 bit )
Row\ColABCDEFG
45A NEWS15.11.201720:59:01Casual20:57:1420:59:5720

46A NEWS15.11.201722:26:58Mid Break-122:26:5422:33:5522

47A NEWS15.11.201722:27:18Mid Break-122:26:5422:33:5522

48A NEWS15.11.201722:27:36Mid Break-122:26:5422:33:5522

49A NEWS15.11.201722:28:06Mid Break-122:26:5422:33:5522

78A NEWS15.11.201722:53:03Mid Break-222:47:0222:54:0222

79A NEWS15.11.201722:53:18Mid Break-222:47:0222:54:0222

80A NEWS15.11.201722:53:42Mid Break-222:47:0222:54:0222

81A NEWS15.11.201722:57:15Casual22:57:1123:00:0522

87A NEWS15.11.201722:58:48Casual22:57:1123:00:0522

88A NEWS15.11.201722:59:08Casual22:57:1123:00:0522

89A NEWS18.11.201723:01:21Mid Break-123:01:1723:03:2123

90A NEWS18.11.201723:01:37Mid Break-123:01:1723:03:2123

91A NEWS18.11.201723:01:57Mid Break-123:01:1723:03:2123

140A NEWS18.11.201723:43:10Mid Break-323:33:5323:44:5523

141A NEWS18.11.201723:43:40Mid Break-323:33:5323:44:5523

142A NEWS18.11.201723:44:39Mid Break-323:33:5323:44:5523

143A NEWS18.11.201723:57:21Casual23:57:2123:59:5823

144A NEWS18.11.201723:57:31Casual23:57:2123:59:5823

145A NEWS18.11.201723:57:39Casual23:57:2123:59:5823

146A NEWS18.11.201723:57:57Casual23:57:2123:59:5823

150A NEWS18.11.201723:58:46Casual23:57:2123:59:5823

151A NEWS18.11.201723:59:06Casual23:57:2123:59:5823

152B NEWS16.11.201720:01:24Mid Break-220:01:2420:01:5020

153B NEWS16.11.201720:15:08Mid Break-120:15:0820:20:2020

196B NEWS16.11.201720:42:04Mid Break-220:31:4120:43:2420

197B NEWS16.11.201720:42:14Mid Break-220:31:4120:43:2420

198B NEWS16.11.201720:42:29Mid Break-220:31:4120:43:2420

199B NEWS16.11.201720:42:49Mid Break-220:31:4120:43:2420

200B NEWS16.11.201720:53:38Casual20:53:3821:00:0220
Worksheet: Sheet2v3

DocAElstein
04-24-2019, 11:47 AM
_____ Workbook: Data Sheet v3.xls ( Using Excel 2007 32 bit )
Row\ColABCDEFGH
199B NEWS16.11.201720:42:49Mid Break-220:31:4120:43:2420

200B NEWS16.11.201720:53:38Casual20:53:3821:00:0220

201B NEWS16.11.201720:54:03Casual20:53:3821:00:0220

202B NEWS16.11.201720:54:14Casual20:53:3821:00:0220

203B NEWS16.11.201720:54:29Casual20:53:3821:00:0220

217B NEWS16.11.201720:58:13Casual20:53:3821:00:0220

218B NEWS16.11.201720:58:54Casual20:53:3821:00:0220

219B NEWS16.11.201720:59:29Casual20:53:3821:00:0220

220B NEWS18.11.201721:07:03Mid Break-221:07:0321:07:2921

221B NEWS18.11.201721:23:41Mid Break-321:23:4121:28:0621

222B NEWS18.11.201721:24:26Mid Break-321:23:4121:28:0621

256B NEWS18.11.201721:48:58Mid Break-721:46:2221:49:3521

257B NEWS18.11.201721:49:10Mid Break-721:46:2221:49:3521

258B NEWS18.11.201721:49:20Mid Break-721:46:2221:49:3521

259B NEWS18.11.201721:52:48Casual21:52:4821:59:5821

260B NEWS18.11.201721:53:08Casual21:52:4821:59:5821

269B NEWS18.11.201721:57:10Casual21:52:4821:59:5821

270B NEWS18.11.201721:57:53Casual21:52:4821:59:5821

271B NEWS18.11.201721:59:03Casual21:52:4821:59:5821

272B NEWS18.11.201721:59:25Casual21:52:4821:59:5821

273C NEWS17.11.201722:01:33Casual22:01:3322:03:1122

274C NEWS17.11.201722:02:01Casual22:01:3322:03:1122

275C NEWS17.11.201722:02:16Casual22:01:3322:03:1122

276C NEWS17.11.201722:02:51Casual22:01:3322:03:1122

277C NEWS17.11.201722:18:46Mid Break-122:18:4622:20:3122

292C NEWS17.11.201722:46:44Mid Break-222:41:2422:47:4422

293C NEWS17.11.201722:47:25Mid Break-222:41:2422:47:4422

294C NEWS17.11.201722:58:10Casual22:57:2622:59:5522

295
Worksheet: Sheet2v3

DocAElstein
04-24-2019, 12:26 PM
Corresponding Sheet1 for the data Sheet2 of the last 3 posts:

_____ Workbook: Data Sheet v3.xls ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1DateChannelsstart timeNew Time


2
11.15.2017
A NEWS
20:07:00


3
11.15.2017
A NEWS
20:14:00


4
11.15.2017
A NEWS
20:21:00


5
11.15.2017
A NEWS
20:28:00


6
11.15.2017
A NEWS
20:35:00


7
11.15.2017
A NEWS
20:42:00


8
11.15.2017
A NEWS
20:49:00


9
11.15.2017
A NEWS
20:56:00


10
11.15.2017
A NEWS
22:49:00


11
11.15.2017
A NEWS
22:56:00


12
11.18.2017
A NEWS
23:15:00


13
11.18.2017
A NEWS
23:30:00


14
11.18.2017
A NEWS
23:45:00


15
11.16.2017
B NEWS
20:29:00


16
11.16.2017
B NEWS
20:59:00


17
11.18.2017
B NEWS
21:10:00


18
11.18.2017
B NEWS
21:20:00


19
11.18.2017
B NEWS
21:30:00


20
11.18.2017
B NEWS
21:40:00


21
11.18.2017
B NEWS
21:50:00


22
11.17.2017
C NEWS
22:13:00


23
11.17.2017
C NEWS
22:26:00


24
11.17.2017
C NEWS
22:39:00


25
11.17.2017
C NEWS
22:52:00


26
11.17.2017
D NEWS
23:13:00


27


28
Worksheet: Sheet1v3

DocAElstein
04-24-2019, 12:31 PM
Full data Sheet1 data ( part 1)


Channel Date AdStart MidBreak Break_Start Break_End Hour
A NEWS 15.11.2017 20:19:12 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:19:32 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:19:49 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:20:01 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:20:47 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:21:10 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:21:20 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:21:30 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:21:46 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:22:55 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:23:07 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:23:42 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:23:57 Mid Break-1 20:19:08 20:24:07 20
A NEWS 15.11.2017 20:24:52 Mid Break-2 20:24:52 20:27:26 20
A NEWS 15.11.2017 20:25:07 Mid Break-2 20:24:52 20:27:26 20
A NEWS 15.11.2017 20:25:52 Mid Break-2 20:24:52 20:27:26 20
A NEWS 15.11.2017 20:26:52 Mid Break-2 20:24:52 20:27:26 20
A NEWS 15.11.2017 20:27:03 Mid Break-2 20:24:52 20:27:26 20
A NEWS 15.11.2017 20:42:50 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:43:02 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:43:32 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:43:57 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:44:12 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:44:24 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:44:40 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:44:56 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:45:27 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:46:36 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:47:36 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:47:46 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:48:21 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:48:36 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:48:59 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:49:35 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:49:47 Mid Break-3 20:42:46 20:50:06 20
A NEWS 15.11.2017 20:57:23 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:57:34 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:57:45 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:58:00 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:58:07 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:58:16 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:58:33 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:58:42 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:59:01 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 22:26:58 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:27:18 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:27:36 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:28:06 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:28:31 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:28:46 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:29:03 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:03 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:18 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:38 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:53 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:31:02 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:31:18 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:31:53 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:32:09 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:32:39 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:32:54 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:33:06 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:33:31 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:47:06 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:47:51 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:48:51 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:49:21 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:49:33 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:49:48 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:50:08 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:50:28 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:50:44 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:51:14 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:51:51 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:52:26 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:52:42 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:53:03 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:53:18 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:53:42 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:57:15 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:57:30 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:00 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:14 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:24 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:41 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:48 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:59:08 Casual 22:57:11 23:00:05 22
A NEWS 18.11.2017 23:01:21 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:01:37 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:01:57 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:02:27 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:02:57 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:16:35 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:16:56 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:17:20 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:17:37 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:17:52 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:02 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:17 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:26 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:38 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:19:13 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:19:43 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:19:53 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:20:00 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:20:25 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:00 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:17 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:47 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:54 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:22:09 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:22:19 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:33:57 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:34:28 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:34:43 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:34:53 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:35:01 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:35:11 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:35:46 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:01 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:11 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:23 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:38 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:53 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:03 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:15 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:52 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:59 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:39:00 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:39:24 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:39:39 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:40:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:41:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:41:20 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:41:35 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:42:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:42:20 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:42:51 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:43:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:43:40 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:44:39 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:57:21 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:57:31 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:57:39 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:57:57 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:13 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:23 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:39 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:46 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:59:06 Casual 23:57:21 23:59:58 23
B NEWS 16.11.2017 20:01:24 Mid Break-2 20:01:24 20:01:50 20
B NEWS 16.11.2017 20:15:08 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:15:33 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:15:43 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:15:58 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:16:33 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:16:48 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:04 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:19 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:34 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:44 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:18:02 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:18:27 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:18:42 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:19:12 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:19:32 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:19:47 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:31:41 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:32:12 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:32:37 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:32:52 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:02 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:22 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:32 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:57 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:34:12 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:34:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:35:34 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:19 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:39 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:54 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:37:13 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:37:44 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:09 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:24 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:59 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:39:39 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:40:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:40:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:41:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:41:34 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:41:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:14 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:29 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:53:38 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:03 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:14 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:29 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:43 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:03 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:13 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:28 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:38 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:48 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:56:18 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:56:33 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:56:58 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:13 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:28 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:43 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:53 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:58:13 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:58:54 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:59:29 Casual 20:53:38 21:00:02 20
B NEWS 18.11.2017 21:07:03 Mid Break-2 21:07:03 21:07:29 21
B NEWS 18.11.2017 21:23:41 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:24:26 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:24:36 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:24:57 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:25:07 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:25:17 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:25:47 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:26:12 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:26:27 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:26:52 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:27:02 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:27:32 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:27:47 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:36:02 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:36:37 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:36:56 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:37:26 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:37:36 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:37:51 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:38:28 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:38:43 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:38:53 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:39:18 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:39:38 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:40:08 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:40:33 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:41:25 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:45:02 Mid Break-6 21:44:41 21:45:33 21
B NEWS 18.11.2017 21:46:22 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:46:48 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:47:08 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:47:23 ..................................cont. in next post

DocAElstein
04-24-2019, 12:34 PM
Full data input sheet2 cont........


.................................................. .. Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:58:33 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:58:42 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 20:59:01 Casual 20:57:14 20:59:57 20
A NEWS 15.11.2017 22:26:58 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:27:18 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:27:36 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:28:06 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:28:31 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:28:46 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:29:03 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:03 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:18 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:38 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:30:53 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:31:02 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:31:18 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:31:53 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:32:09 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:32:39 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:32:54 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:33:06 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:33:31 Mid Break-1 22:26:54 22:33:55 22
A NEWS 15.11.2017 22:47:06 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:47:51 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:48:51 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:49:21 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:49:33 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:49:48 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:50:08 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:50:28 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:50:44 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:51:14 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:51:51 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:52:26 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:52:42 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:53:03 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:53:18 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:53:42 Mid Break-2 22:47:02 22:54:02 22
A NEWS 15.11.2017 22:57:15 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:57:30 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:00 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:14 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:24 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:41 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:58:48 Casual 22:57:11 23:00:05 22
A NEWS 15.11.2017 22:59:08 Casual 22:57:11 23:00:05 22
A NEWS 18.11.2017 23:01:21 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:01:37 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:01:57 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:02:27 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:02:57 Mid Break-1 23:01:17 23:03:21 23
A NEWS 18.11.2017 23:16:35 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:16:56 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:17:20 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:17:37 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:17:52 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:02 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:17 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:26 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:18:38 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:19:13 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:19:43 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:19:53 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:20:00 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:20:25 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:00 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:17 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:47 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:21:54 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:22:09 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:22:19 Mid Break-2 23:16:35 23:22:43 23
A NEWS 18.11.2017 23:33:57 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:34:28 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:34:43 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:34:53 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:35:01 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:35:11 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:35:46 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:01 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:11 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:23 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:38 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:36:53 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:03 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:15 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:52 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:37:59 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:39:00 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:39:24 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:39:39 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:40:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:41:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:41:20 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:41:35 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:42:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:42:20 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:42:51 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:43:10 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:43:40 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:44:39 Mid Break-3 23:33:53 23:44:55 23
A NEWS 18.11.2017 23:57:21 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:57:31 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:57:39 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:57:57 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:13 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:23 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:39 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:58:46 Casual 23:57:21 23:59:58 23
A NEWS 18.11.2017 23:59:06 Casual 23:57:21 23:59:58 23
B NEWS 16.11.2017 20:01:24 Mid Break-2 20:01:24 20:01:50 20
B NEWS 16.11.2017 20:15:08 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:15:33 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:15:43 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:15:58 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:16:33 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:16:48 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:04 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:19 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:34 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:17:44 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:18:02 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:18:27 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:18:42 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:19:12 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:19:32 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:19:47 Mid Break-1 20:15:08 20:20:20 20
B NEWS 16.11.2017 20:31:41 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:32:12 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:32:37 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:32:52 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:02 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:22 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:32 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:33:57 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:34:12 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:34:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:35:34 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:19 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:39 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:36:54 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:37:13 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:37:44 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:09 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:24 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:38:59 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:39:39 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:40:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:40:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:41:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:41:34 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:41:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:04 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:14 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:29 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:42:49 Mid Break-2 20:31:41 20:43:24 20
B NEWS 16.11.2017 20:53:38 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:03 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:14 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:29 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:54:43 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:03 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:13 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:28 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:38 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:55:48 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:56:18 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:56:33 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:56:58 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:13 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:28 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:43 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:57:53 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:58:13 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:58:54 Casual 20:53:38 21:00:02 20
B NEWS 16.11.2017 20:59:29 Casual 20:53:38 21:00:02 20
B NEWS 18.11.2017 21:07:03 Mid Break-2 21:07:03 21:07:29 21
B NEWS 18.11.2017 21:23:41 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:24:26 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:24:36 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:24:57 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:25:07 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:25:17 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:25:47 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:26:12 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:26:27 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:26:52 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:27:02 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:27:32 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:27:47 Mid Break-3 21:23:41 21:28:06 21
B NEWS 18.11.2017 21:36:02 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:36:37 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:36:56 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:37:26 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:37:36 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:37:51 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:38:28 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:38:43 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:38:53 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:39:18 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:39:38 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:40:08 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:40:33 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:41:25 Mid Break-5 21:36:02 21:42:00 21
B NEWS 18.11.2017 21:45:02 Mid Break-6 21:44:41 21:45:33 21
B NEWS 18.11.2017 21:46:22 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:46:48 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:47:08 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:47:23 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:47:58 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:48:23 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:48:43 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:48:58 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:49:10 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:49:20 Mid Break-7 21:46:22 21:49:35 21
B NEWS 18.11.2017 21:52:48 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:53:08 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:53:23 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:53:58 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:54:53 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:55:13 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:55:28 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:55:40 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:56:40 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:56:56 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:57:10 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:57:53 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:59:03 Casual 21:52:48 21:59:58 21
B NEWS 18.11.2017 21:59:25 Casual 21:52:48 21:59:58 21
C NEWS 17.11.2017 22:01:33 Casual 22:01:33 22:03:11 22
C NEWS 17.11.2017 22:02:01 Casual 22:01:33 22:03:11 22
C NEWS 17.11.2017 22:02:16 Casual 22:01:33 22:03:11 22
C NEWS 17.11.2017 22:02:51 Casual 22:01:33 22:03:11 22
C NEWS 17.11.2017 22:18:46 Mid Break-1 22:18:46 22:20:31 22
C NEWS 17.11.2017 22:18:56 Mid Break-1 22:18:46 22:20:31 22
C NEWS 17.11.2017 22:19:32 Mid Break-1 22:18:46 22:20:31 22
C NEWS 17.11.2017 22:41:24 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:41:34 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:42:01 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:42:31 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:43:06 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:43:16 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:43:26 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:44:07 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:44:49 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:45:26 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:46:24 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:46:34 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:46:44 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:47:25 Mid Break-2 22:41:24 22:47:44 22
C NEWS 17.11.2017 22:58:10 Casual 22:57:26 22:59:55 22

DocAElstein
04-25-2019, 01:49 PM
Version 3 code for Haider, for this post:
http://www.excelfox.com/forum/showthread.php/2330-Fill-Column-Based-on-Actual-Time?p=11148&viewfull=1#post11148


Option Explicit '
Sub HaiderAdSlots_v3() ' http://www.excelfox.com/forum/showthread.php/2330-Fill-Column-Based-on-Actual-Time?p=11124&viewfull=1#post11124
Rem 1 Worksheets info
Dim Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = ThisWorkbook.Worksheets("Sheet1v3"): Set Ws2 = ThisWorkbook.Worksheets("Sheet2v3")
Dim Lr1 As Long, Lr2 As Long
Let Lr1 = Ws1.Range("A" & Ws1.Range("A" & Ws1.Rows.Count & "").End(xlUp).Row & "").Row: Let Lr2 = Ws1.Range("A" & Ws2.Range("A" & Ws2.Rows.Count & "").End(xlUp).Row & "").Row
'1b) data arrays, original data
Dim arrInSht2() As Variant, arrOutSht1() As Variant
Let arrInSht2() = Ws2.Range("A1:G" & Lr2 + 1 & "").Value2 ' !!! I need +1 as a "bodge workaroung to prevent an index out of range error --- here
Let arrOutSht1() = Ws1.Range("A1:C" & Lr1 & "").Value2
'1b)(ii) extra "column" for outout
ReDim Preserve arrOutSht1(1 To Lr1, 1 To 4) ' we may add a last dimension, but must keep the others the same as they were
Rem 2 Group ident arrays, for convenience
'2a) an array of the idents for all data rows in output sheet1
Dim arrOutId() As String
ReDim arrOutId(1 To Lr1)
Dim cnt As Long
For cnt = 2 To Lr1 ' Channel Date in Long number form Hour as number
Let arrOutId(cnt) = arrOutSht1(cnt, 2) & " | " & arrOutSht1(cnt, 1) & " | " & CLng(Hour(arrOutSht1(cnt, 3))) ' add to array of all idents in rows 2 to last row
Next cnt
'2b) idents for input historical data, includung an additonal arrray of just the unique ident values
Dim arrInId() As String
ReDim arrInId(1 To Lr2 + 1)
For cnt = 2 To Lr2 ' Channel Date in Long number form Hour as number
Let arrInId(cnt) = arrInSht2(cnt, 1) & " | " & arrInSht2(cnt, 2) & " | " & CLng(arrInSht2(cnt, 7)) ' add to array of all idents in rows 2 to last row
Dim strEnucsIds As String: ' a string of unique idents to be used to create an additonal arrray of just the unique ident values
If InStr(1, strEnucsIds, arrInId(cnt), vbBinaryCompare) = 0 Then Let strEnucsIds = strEnucsIds & arrInId(cnt) & "####"
Next cnt
Let strEnucsIds = Left(strEnucsIds, Len(strEnucsIds) - 4) ' takes off last "####"
Dim arrEnucsIds() As String: Let arrEnucsIds() = Split(strEnucsIds, "####", -1, vbBinaryCompare) ' additonal arrray of just the unique ident values
Dim CntIds As Long: Let CntIds = UBound(arrEnucsIds()) + 1 ' +1 because the index numbers of array generated by Split function goes like 0 1 2 3 4 ... etc. So the total number of elements is 1 more than the ubound: .... (Ubound gives the index number of the last element, not necerssarily the numberr of elements)
'Debug.Print strEnucsIds
'2c) We know the number of unique idents , so can assign an array, a groupings array, to hold each group of times
Dim arrGrpTimes() As Variant ' I must use variant, as that is the only thing that can hild an array - i will be putting arrasy of the AdStart times in the second dimension ("second column")
ReDim arrGrpTimes(1 To CntIds, 1 To 2) ' The first column has the unique ID, and the second column will be itself an array of the historical AdStart times for that group
Rem 3 Looping to build groupings array
Dim HisCnt As Long ' MAIN LOOP Count for rows of historical data ================================================
Let HisCnt = 1 ' this is so +1 gives the start at row 2, so as not to consider the header ....**
Do While HisCnt < Lr2
Dim GrpCnt As Long ' this will be used for the first dimension("row") of our
Dim strTimes As String: Let strTimes = " " ' reset for next group of AdStart times
Let GrpCnt = GrpCnt + 1 ' reset to index/first dimension("row") next group of AdStart times
Do ' This INNER LOOP will be repeated for each group -------------------------INNER LOOP
Let HisCnt = HisCnt + 1 ' this effectively "goes down" each row in data Sheet2 - starting at row 2 ....**
Let strTimes = strTimes & arrInSht2(HisCnt, 3) & " "

Loop While arrInId(HisCnt + 1) = arrInId(HisCnt) ' !!! ---here --INNER LOOP
Let strTimes = Trim(strTimes) ' takes off leading and trailing spaces
'Debug.Print strTimes
' at the end of each inner loop, we have the data needed to add the AdStart data for this group
Let arrGrpTimes(GrpCnt, 1) = arrEnucsIds(GrpCnt - 1) ' -1 is because arrEnucsIds() starts at index number 0 , like index numbers go 0 1 2 3 4 ... etc.
Dim arrTemp() As String ' temporary array to build each array of AdStart times
Let arrTemp() = Split(strTimes, " ", -1, vbBinaryCompare)
Let arrGrpTimes(GrpCnt, 2) = arrTemp()
Loop ' MAIN LOOP Count for rows of historical data ================================================

Rem 4 Going through ("down") the output, Sheet1, data , and adding a New Time at each "row"
For cnt = 2 To Lr1 ' MAIN LOOP for Count for rows in Sheet1 ================================================== =
'4b) determine to which group the "row" belongs
Dim MtchRes As Variant ' The next line will either return a whole number of the "position along" that it fids a match, or it will return a VBA error type. So a variant for the Variable must be used
Let MtchRes = Application.Match(arrOutId(cnt), arrEnucsIds(), 0) ' return the position along of a match ( looking for arrOutId(cnt) , in the array of unique Ids arrEnucsIds() , 0 indicates excact match ) ....._- note the array of unique Ids is determined from the Ids in input historical data
If Not IsError(MtchRes) Then '4b)(i) - time to get a time, form the array { "20:19:12" , "20:19:32" , "20:49:12" , ….etc } of times for this Id group
Dim arrTempTimes() As String ' for the array , { "20:19:12" ,........ } , of times
Let arrTempTimes() = arrGrpTimes(MtchRes, 2) ' I can assign a dynamic array to any other array, as long as the types, ( String) in this case are the same. The wanted array is in the second column of the array, arrGrpTimes()
Rem 5 "Getting the random times bit"...
Dim RndIndx As Long: Randomize: Let RndIndx = Int(Rnd() * (UBound(arrTempTimes()) + 1)) ' like IntegerOf(Rnd()*(N+1))
Let arrOutSht1(cnt, 4) = arrTempTimes(RndIndx)
Else '4b(ii). This is the case of no unique Id as determined from the Ids in input historical data, arrEnucsIds() ....._- so this may occur if ..." if in any case there is no spot aired in Sheet2 on a specific channel, date and timeslot then New Time will be same as start time...."
Let arrOutSht1(cnt, 4) = arrOutSht1(cnt, 3) ' ...".....if in any case there is no spot aired in Sheet2 on a specific channel, date and timeslot then New Time will be same as start time....."
End If

Next cnt ' MAIN LOOP for Count for rows in Sheet1 ================================================== ===========

Rem 6 Output test
Let ThisWorkbook.Worksheets("OutputTestv3").Range("A1").Resize(UBound(arrOutSht1(), 1), 4).Value = arrOutSht1()

End Sub

DocAElstein
04-25-2019, 01:51 PM
A typical test run of the last routine gives this, ( using the test data from the last few posts , #158 - #163 )

_____ Workbook: Data Sheet v3.xls ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F

1DateChannelsstart timeNew Time


2
11.15.2017
A NEWS
20:07:00
20:21:20


3
11.15.2017
A NEWS
20:14:00
20:20:01


4
11.15.2017
A NEWS
20:21:00
20:44:24Duplicate


5
11.15.2017
A NEWS
20:28:00
20:58:33


6
11.15.2017
A NEWS
20:35:00
20:42:50


7
11.15.2017
A NEWS
20:42:00
20:44:24Duplicate


8
11.15.2017
A NEWS
20:49:00
20:58:07


9
11.15.2017
A NEWS
20:56:00
20:21:10


10
11.15.2017
A NEWS
22:49:00
22:30:03


11
11.15.2017
A NEWS
22:56:00
22:47:51


12
11.18.2017
A NEWS
23:15:00
23:57:31


13
11.18.2017
A NEWS
23:30:00
23:57:57


14
11.18.2017
A NEWS
23:45:00
23:16:35


15
11.16.2017
B NEWS
20:29:00
20:32:12


16
11.16.2017
B NEWS
20:59:00
20:18:27


17
11.18.2017
B NEWS
21:10:00
21:52:48


18
11.18.2017
B NEWS
21:20:00
21:24:26


19
11.18.2017
B NEWS
21:30:00
21:38:43


20
11.18.2017
B NEWS
21:40:00
21:53:58


21
11.18.2017
B NEWS
21:50:00
21:26:12


22
11.17.2017
C NEWS
22:13:00
22:02:01


23
11.17.2017
C NEWS
22:26:00
22:46:34


24
11.17.2017
C NEWS
22:39:00
22:42:31


25
11.17.2017
C NEWS
22:52:00
22:43:26


26
11.17.2017
D NEWS
23:13:00
23:13:00


27


28
Worksheet: OutputTestv3

File: "Data Sheet v3.xls" : https://app.box.com/s/pym52m1gslq5cynqgob8izltu6ztesim

DocAElstein
06-07-2019, 03:13 PM
LKAJJFLKDJF

DocAElstein
06-08-2019, 11:04 AM
Some notes from a deleted post answering/replying to a snb troll here : https://eileenslounge.com/viewtopic.php?f=27&t=39185&p=303506#p303506
( chttps://excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=18405&viewfull=1#post18405
)

Some Notes Comparison in support of this forum post.
https://eileenslounge.com/viewtopic.php?p=303506#p303506


Some notes to compare / consider this: https://eileenslounge.com/viewtopic.php?p=303487#p303487
Selection.Value = Evaluate("=IF({1},TRIM(SUBSTITUTE(" & Selection.Address & ",CHAR(160),CHAR(32))))")
, and this

@doc, if you like to evaluate
Selection.Name = "snb"
[snb].Replace Chr(160), " "
[snb] = [index(trim(snb),)]
So,
… not sure what is to be got from that. Could be a typical snb Troll (https://en.wikipedia.org/wiki/Troll_(slang)), or something useful. snb’s posts are usually some combination of the two. But I have a bit of time, this time around, so my take on it, :)
………………..



Wot are we looking at / comparing / considering….

This was my basic one liner

Let Selection.Value = Evaluate("=IF({1},TRIM(SUBSTITUTE(" & Selection.Address & ",CHAR(160),CHAR(32))))")

That includes the usual trick of
IF({1},__The main bit __ )
That trick is to get array values out when they often don’t , mostly in earlier Excel versions, 2013 and lower. So the main bit is

Let Selection.Value = Evaluate("=TRIM(SUBSTITUTE(" & Selection.Address & ",CHAR(160),CHAR(32)))")

In fact that main bit is most likely all you need for Excel 2016 +

So, I am comparing that/ considering the “Evaluate” alternative from snb

Selection.Name = "snb"
[snb].Replace Chr(160), " "
[snb] = [index(trim(snb),)]

_.________________________

These two lines:, (or part thereof)

Selection.Name = "snb"
[snb]
I have seen this from you snb, in a few places, ( example, https://excelfox.com/forum/showthread.php/2083-Delete-One-Row-From-A-2D-Variant-Array?p=9714&viewfull=1#post9714 )
It is an interesting way to make some thing dynamic that you might normally need to hard code:
To explain:
We can do an Evaluate in a couple of ways
_ The way I like to do it: __ Evaluate(“___“)
and
_ a shorthand way _________ [___]
The advantage of the first over the second way is that because the syntax insist you build the thing, ___ , in a string, that string can include variables, making a solution dynamic.
The second way would usually need to be hard coded. In this example it is hardcode, but hard coded to the name of a range, so in a round about way its made dynamic.
It seems a bit of a red herring here, we can replace
____ Selection.Name = "snb"
____ [snb].
with
____ Selection.
So unless I missed something we have gained nothing , just confused and obfuscated there.
_._______________________________

.Replace
.Replace Chr(160), " "
I confess I have not used much the VBA Range.Replace method (https://learn.microsoft.com/en-us/office/vba/api/excel.range.replace) ( https://learn.microsoft.com/en-us/office/vba/api/excel.range.replace ) much, but it seems to have some similar arguments to the VBA .Find method.
Used here I see no advantages over the Excel SUBSTITUTE. It has the disadvantage here that it introduces another line. Approximately, in effect it has done like replaced one line,
__ TRIM(SUBSTITUTE(" & Selection.Address & ",CHAR(160),CHAR(32)))
, with 2 lines
__ X = SUBSTITUTE(" & Selection.Address & ",CHAR(160),CHAR(32))
__ TRIM(X)

_.____________________________

This line: _ [snb] = [index(trim(snb),)]
This is approximately the second of the 2 code lines above. It’s this one
__ Selection.Value = Evaluate("=TRIM(X)")

_.__________________________________

Some other stuff/ observations / comments :
A couple of things
_(i) " "
_(ii) Index(___ , )
These two things are couple of things written in a slightly different way
_(i) " "
That is a simple text space, - in Excel can be written as CHAR(32) and in VBA as Chr(32)
_(ii) Index(___ , )
For Office versions 2016 and lower versions , some things annoyingly do not return us an array of results. Often the results are there., somewhere, but they annoyingly are not given. ( There seems to be a parallel in the way it works to how things in a spreadsheet work or don’t, depending on whether you enter normally or do the so called CSE thing).
There is no documentation on this, but people have found empirically that some tricks used in Evaluate(" ") get us the array of results we want on the occasions that they annoyingly do not otherwise appear. One that has been used for many years was
INDEX(___ , ) , where ___ is the thing you want an array of results from, and you suspect it has, but is annoyingly not giving you.
A few years back I** stumbled on this alternative, which usually seems to do the same
IF({1},___)
( ** It is possible that someone else noticed that before I did. I never saw any examples yet, but I claim no “ownership” of it )
_.________________________________



Summary ( of snb’s post (https://eileenslounge.com/viewtopic.php?p=303506#p303506) )
So its close to my solution, in a less efficient way and in an obscure, obfuscated form.
Not really an alternative solution.
Probably more trouble than its worth this time around. Bit of a Troll really, Lol
Interesting only if you have a lot of free time and are bored.


Alan

TallPaulUK
06-10-2019, 05:00 PM
Hi Alan... Thank you so much , thank you for your explanation as this has helped be understand more of what the code does... sometime this is more important than the solution itself.

Keep up the good work.
Thanks again
Paul

DocAElstein
06-10-2019, 10:14 PM
You're welcome , Paul , thanks for the feed

DocAElstein
06-22-2019, 03:17 PM
This is post https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=18640&viewfull=1#post18640
https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)/page18#post18640



Building and breaking ( up ) some formulas in cells
Some notes, coding breakdown to go with this post
https://eileenslounge.com/viewtopic.php?p=314208#p314208


For consistency / better comparison of offerings, we will use the same test data that I have used in that Thread ( https://eileenslounge.com/viewtopic.php?p=314200#p314200 ) a few times , that is a few rows where I have numbers in
https://i.postimg.cc/NjzZxy0C/Test-data-5-rows-of-columns-A-C-to-be-summed-in-column-D.jpg
5767 https://i.postimg.cc/21nHkShn/Test-data-5-rows-of-columns-A-C-to-be-summed-in-column-D.jpg (https://postimg.cc/21nHkShn)
_____ Workbook: Leading Apostrophe, Text in cells.xls ( Using Excel 2007 32 bit )
Row\ColABCDE
1101120

2111221

3121322

4131423

5141524

6
Worksheet: Tabelle1
There are two snb offerings, that I will look at and ramble off in tangents probably as well, Lol
, and we will look at the first one in this post, which is very easy and basic if you sanitise the snb obfuscation as I do in this first TLDR explanation
, and we will look at the second one in the next post ( https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=18641&viewfull=1#post18641 , https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)/page18#post18641 ) , which is a more typical snb one liner coding offering, but still is a bit obfuscated on top of that, or so I thought…



S0… This one first:

Sub M_snb() ' https://eileenslounge.com/viewtopic.php?p=314208#p314208
With Cells(1).CurrentRegion
.Offset(, .Columns.Count).Resize(, 1) = "=A1+B1+C1"
End With
End Sub
The TLDR
There is not much to say about this offering. - It sort of, puts the formula string, "=A1+B1+C1" down the column range D1:D5 That formula string needs some further explanation as below, but to avoid unnecessary obfuscation confusion, lets first say that this bit,
Cells(1).CurrentRegion.Offset(, .Columns.Count).Resize(, 1), is just an obfuscated way to say Range("D1:D5")
So that coding can be written in this simpler way, in one code line

Sub PutA1andB1andC1InColumnD() '
Range("D1:D5") = "=A1+B1+C1" ' LHS see https://www.excelfox.com/forum/showthread.php/2918-Right-Hand-Side-Range-Range-Value-values-Range-Range-Value-only-sometimes-Range-Range-Value-Anomaly?p=23192&viewfull=1#post23192 https://www.excelfox.com/forum/showthread.php/2914-Tests-and-Notes-on-Range-objects-in-Excel-Cell?p=22099&viewfull=1#post22099 RHS see https://teylyn.com/2017/03/21/dollarsigns/#comment-191
End Sub
( The small functionality difference, to Range("D1:D5") is that the last row is got if you don’t know it, (assuming your test range is isolated by at least one free columns so that Cells(1).CurrentRegion will work). It makes the coding debatably compact or obfuscated, personally I would say obfuscated if the thing is supposed to be demonstrating a way to do something, JIMHO. )
_.__________________________

Some more detailed explanations of the basic formula of this type:
Range("D1:D5") = "=A1+B1+C1"

LHS , Range("D1:D5") =
Most of us think we know what that is about, we are close enough with our thinking on that
( Here are some recent notes on what the left hand side (LHS) of the single code line is all about , most of us already think we know all about, we are not far off, but I think, for now, I have it better sussed than anyone, :) ,
https://www.excelfox.com/forum/showthread.php/2918-Right-Hand-Side-Range-Range-Value-values-Range-Range-Value-only-sometimes-Range-Range-Value-Anomaly?p=23192&viewfull=1#post23192
https://www.excelfox.com/forum/showthread.php/2914-Tests-and-Notes-on-Range-objects-in-Excel-Cell?p=22099&viewfull=1#post22099 )

RHS , = "=A1+B1+C1"
The right hand side, ( RHS ), could do with being considered and explained a bit better than it usually is ….
Two similar main topics are required in this explanation
_1 When we tell / ask / give excel to do something, we often do that in a singular, or similarly simplified way that is more humanly conveniently for us. The original idea of Excel is to reduce our tedious work, in particular tedious repetitive work. As part of this, a common practice is that we ask something to be done across a range of cells, that is the LHS and on the RHS in the most simplified explanation, we give it the information for a single cell, conventionally top left of the range. Depending on exactly what information we give, ( that is _2 ) , Excel will apply what it thinks we want to all the cells in the range. In fact, we will see that Excel simply puts exactly the same thing in every cell!!!
So that’s topic _1 one covered
_2 What we give
We are giving a single cell reference. Excel has two conventions , or "languages" that it understands when giving and receiving cell references. We are using the so called "A 1 column letter and row number notation" ( The other is the so called "R C row and column number notation”, which we will only consider briefly )
Those two conventions differ mainly only in the way they are physically shown. Both conventions have within them two basic concepts/ things that we can use. One is simple: An absolute grid or co ordinate or x y reference to a single cell. ( Some thing looking like this $A$1 $Y$34 etc. in the "A 1 column letter and row number notation" way of showing, or like R4C8 R1C1 etc in the "R C row and column number notation"). If we give that fixed absolute grid reference type of thing, then Excel very easily sees that across the range given on the LHS, the same cells will always be referenced to regardless of which cells are used for the final output that we are looking for. So for a simple formula we would always get the same result in every output cell.
In other words, in simple terms referring to our actual example, the use of "=$A$1+$B$1+$C$1" on the RHS will result in the same sum formula of the first row will be done in every cell in the column D range, D1:D5
That is simple, no great intelligence, Human of artificial to do that.
We are not concerned with that here.
The second way/ concept that we are concerned with here, is the concept that helps Excel to give us what we want, if we want something slightly less simple. Because in everyday requirements this slightly less simple way is more often what we want, then the way we see or give Excel these cell references most often is in this apparent simpler A1, Y34, etc. way, - this apparent simplicity unfortunately disguising that it is actually indicating the more advanced of the two possibilities. It is not a simple x y grid type reference as it may appear to be.
Now, _1 told us that what we give as a single formula in the RHS will be taken as best Excel can to be put in all the cells in the range we give on the LHS. In fact although it’s not obvious, it simply puts exactly the same thing in each cell. It gives not an absolute grid or co ordinate or x y reference as it might be assumed, but rather a fixed vector or relative cell reference. So exactly the same thing is in fact put in the cell, it just does not look like it
A slightly more detailed explanation of these last concepts are given here: https://www.excelfox.com/forum/showthread.php/2355-Tests-and-Notes-on-Range-Referrencing?p=24006&viewfull=1#post24006

We cannot so easily see in the "A 1 column letter and row number notation" style "language" the underlying formula that Excel puts in the cells D1:D5. This typically regarded meaningful list of the actual formulas in the is actually a bit misleading
=A1+B1+C1
=A2+B2+C2
=A3+B3+C3
=A4+B4+C4
=A5+B5+C5
( For convenience, use these flipping two code lines that snb gave, https://eileenslounge.com/viewtopic.php?p=314221&sid=7c9de7d4f49e5036253ffe3465256ef4#p314221 , to get a formula spreadsheet )
It is slightly easier if we look at the exact same formulas, but just shown in the other way of showing them. Which is no change to the actual formulas, they are exactly the same formulas, just written in an alternative form but which means the exactly same thing
=RC[-3]+RC[-2]+RC[-1]
=RC[-3]+RC[-2]+RC[-1]
=RC[-3]+RC[-2]+RC[-1]
=RC[-3]+RC[-2]+RC[-1]
=RC[-3]+RC[-2]+RC[-1]
Excel has actually simplified that for us, the more explicit form of that formula used in every cell would be
=R[0]C[-3]+R[0]C[-2]+R[0]C[-1]
( Change your options to get the different convention of "R C row and column number notation”. Example in Excel 2007
https://i.postimg.cc/RZ9NHdnY/Excel-2007-Options.jpg https://i.postimg.cc/X79rqmXF/Excel-2007-Options-Formula-R-C-referrence-style-language.jpg )
What that is telling us is that we have something like a fixed vector or fixed offsets to take us to the cell from which to get the values, specifically
0 row offset , in other words the same row
and
either 1 , 2, or 3 columns offset to the left. (The general convention in Excel is that left to right is positive and visa versa , so to the left is negative)

The "A 1 column letter and row number notation" makes it look like we put a different formula in each cell, but we don’t. Excel is just sowing the same fixed vector in a different way: by showing us the cell at the one end of the vector when the other end is put in the cell where the formula is. That is just the way Excel was designed: in the "A 1 column letter and row number notation" it gives a direct indication of the cell used. This way of showing things can explain the idea of dragging a formula down, - if a formula is written in the relative ( fixed vector ) way of the "A 1 column letter and row number notation", then dragged down, it will appear that Excel is adjusting the formula to reference the appropriate cells, but its not really. It’s really dragging down exactly the same thing which then is shown in a way that will make it appear different in different cells.

That’s about it

Conclusion
In the range D1:D5 the same formula is put in. They all get the 3 values to sum from the same row and either 1, 2 , 3 cells to the left. Think of it as three horizontal pipes of different lengths, the second twice as long as the third 3 times as long as the first

When using this way it is important to use the relative ( fixed vector ) way of the "A 1 column letter and row number notation", since if we used the fixed spreadsheet coordinate way of the "A 1 column letter and row number notation", like =$A$2+$B$2+$C$2 , then it would not work as we want it to: It would in fact, in every cell in the range D1:D5, sum the values of the 3 column in the first row, Just as dragging that formula down would give us
=$A$1+$B$1+$C$1
=$A$1+$B$1+$C$1
=$A$1+$B$1+$C$1
=$A$1+$B$1+$C$1
=$A$1+$B$1+$C$1


( Ref https://teylyn.com/2017/03/21/dollarsigns/#comment-191
Windows display formulas https://eileenslounge.com/viewtopic.php?p=314221#p314221
Excel option R C or A 1 type display https://i.postimg.cc/RZ9NHdnY/Excel-2007-Options.jpg https://i.postimg.cc/X79rqmXF/Excel-2007-Options-Formula-R-C-referrence-style-language.jpg
https://www.excelfox.com/forum/showthread.php/2355-Tests-and-Notes-on-Range-Referrencing?p=24006&viewfull=1#post24006 )

DocAElstein
06-22-2019, 03:31 PM
This is post https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=18640&viewfull=1#post18641
https://www.excelfox.com/forum/showthread.php/2909-Appendix-Thread-Evaluate-Range-(-Codes-for-other-Threads-HTML-Tables-etc-)/page18#post18641


Sub M_snb__() ' https://eileenslounge.com/viewtopic.php?p=314208#p314208
With Cells(1).CurrentRegion
.Offset(, .Columns.Count).Resize(, 1) = Evaluate(Replace("index(A1:A~+B1:B~+C1:C~", "~", .Rows.Count) & ",)")
End With
End Sub

From the last post we know the LHS is just
Range("D1:D5") =

As for the RHS, this turned out to be much less signifiucant and more in the directon of a troll / obfuscation than I thought.
At first glance perhaps a typical quite clever compact coding typical of some of snb’s, but after a close inspection it looks like less so – as the OP, ErikJan, was a obviously in a bit of stress at the time, then posting stuff like this to him was perhaps a bit unkind, a typical Troll by any standards.

Working a bit backwards, as in the specific example it helps clarify things a bit quicker:
Consider these two things,
Index( ___ , )
If({1},____ )
The stuff in black is a trick, usually done finally when we find that a CSE type spreadsheet formula, put inside Evaluate(" ") in VBA does not give us the same multiple results as in the spreadsheet. Specifically, annoyingly sometimes, it give us just one answer, corresponding usually to something like the first cell result.

Or saying the same thing a bit differently: in those two things , to a first approximation , the purple bit is the main thing we are considering here, or the main solution type which I am trying to explain
This solution type is what I call, and what I know more about than anyone else on this planet, even snb in the meantime, is the so called, or Alan called, Evaluate("____") Range type solution. These solutions work in a similar way to the so called "array formulas" or "CSE (type 2) formulas" in an excel spreadsheet. But for earlier versions of Excel they annoyingly don’t always work and give us just one answer, corresponding usually to something like the first cell result. We talk then about tricks, "coercing", and the such to get them to give us an array of values, in other words all the values. Those extra bits in black, INDEX( ___ , ) or IF( {1}, ___ ) , are a bodge / trick to make these things work as they mostly do. They only occasionally are needed, and when they are needed they will be needed in all Excel versions before 2016. If you find that they are not needed in any version of Excel before 2016, then they never will be
So they are not always needed, and in fact, it turns out, they are not needed at all in this case, so we can forget all about them here, and so changing this
= Evaluate(Replace(" index(A1:A~+B1:B~+C1:C~", "~", .Rows.Count) & " ,)")
, to this
= Evaluate(Replace("A1:A~+B1:B~+C1:C~", "~", .Rows.Count) & "")
, will have no effect.

Once we have that out of the way, we can see perhaps that the VBA Replace is giving us in effect the last row, (5 , if we use the same examples test range I have been considering most of the time).
To elaborate a bit in words, in case it’s not obvious what we are doing with the replace. The VBA Evaluate used in the Evaluate(" ") specifically takes a string rather than just the same text you would put in a cell
in other words with a simple example, we would need this
Evaluate("=1+1")
rather than
Evaluate(=1+1) )
There is at least one very good reason for , or good outcome of, that. The reason being is that at the end of the day a string wants to be seen there. But importantly, how that string comes about is of no interest to Evaluate( ). First the string will be got, **if it can be, ( **assuming no syntax error , etc. )
In our case we have this thing, which is a VBA thing,
Replace("A1:A~+B1:B~+C1:C~", "~", .Rows.Count)
Now, Rows.Count is another VBA thing and will first be done and will return 5 for the test range I have mostly been using, so we have, ( still in VBA things being done initially )
Replace("A1:A~+B1:B~+C1:C~", "~", 5)
So the way the VBA Replace works in this form is that in the string "A1:A~+B1:B~+C1:C~" , the ~ is replaced with 5 retuning us this final string which evaluate works on
"A1:A5+B1:B5+C1:C5"

So at the end of the day we have this,
Range("D1:D5") = Evaluate("A1:A5 + B1:B5 + C1:C5")



This is very similar to doing manually, in the spreadsheet.these 3 steps
_ step 1 - select the entire range D1:D5, that would be something equivalent to the VBA code line LHS, defining the range to put stuff in, or to apply the RHS to.
https://i.postimg.cc/X7gctgvH/Select-Range-D1-D5.jpg
https://i.postimg.cc/SJJMMCCC/Select-Range-D1-D5.jpg (https://postimg.cc/SJJMMCCC)

The next two steps are doing something similar to the RHS of the VBA code line, - in simplest terms, the this bit inside the Evaluate("____") is approximately like what is in a cell, in other words Evaluate here evaluates stuff as it would be evaluated in a cell. (When multiple ranges are in this bit , then it is something like doing the so called "array formulas", except that we do not have the necessity to do the CSE related things as they are necessary to allow the spreadsheet to adjust to receiving and presenting more that one result, whereas the Evaluate returns type Variant, allowing amongst other things an array to be returned. )

_ step 2 type in =A1:A5 + B1:B5 + C1:C5 ( you might want to click in the formula bar and type it in there, just to be sure that you are not just typing it in one cell, which you don’t want to be doing.
https://i.postimg.cc/WbVw9ysq/write-in-A1-A5-B1-B5-C1-C5.jpg
https://i.postimg.cc/HjSMnBcT/write-in-A1-A5-B1-B5-C1-C5.jpg (https://postimg.cc/HjSMnBcT)

_ step 3 Now you do that so called "array formula CSE type entry" , and you should see all the results as expected.
https://i.postimg.cc/sf7J4zCR/CSE-2-entry.jpg
https://i.postimg.cc/Yj2gtJSX/CSE-2-entry.jpg (https://postimg.cc/Yj2gtJSX)

In this particular example our Evaluate("A1:A5 + B1:B5 + C1:C5") inside VBA will give us that array of values
{41
44;
47;
50;
53}

VBA allows us to apply a field of values ( an array ) to a range in one go, which is what we do.

Range("D1:D5") = Evaluate("A1:A5 + B1:B5 + C1:C5")

DocAElstein
06-26-2019, 03:08 PM
ashchackhch

DocAElstein
08-02-2019, 02:13 PM
hhhdhhc

DocAElstein
08-03-2019, 12:26 PM
asdjccsdjhchcsdhc

DocAElstein
08-11-2019, 12:15 PM
fhqhfhfh

DocAElstein
08-26-2019, 11:48 AM
In support of this Thread:
http://www.excelfox.com/forum/showthread.php/2354-Copy-amp-Paste-by-a-Vba

If column E of ap.xls matches with column A of leverage.xlsx then copy column E of leverage.xlsx and paste it to column Z of ap.xls

Before:
_____ Workbook: ap.xls ( Using Excel 2007 32 bit )
Row\Col
B
C
D
E
Z

1AccountIdEntityNameExchg-SegSymbol


2WC5758NSETCS


3WC5758NSESRTRANSFIN


4WC5758NSEMARICO


5WC5758NSEM&MFIN


6WC5758NSE20MICRONS


7WC5758NSECONCOR


8WC5758NSECOALINDIA


9WC5758NSEBOSCHLTD


10WC5758NSEBERGEPAINT


11WC5758NSE5PAISA


12WC5758NSETATAELXSI


13WC5758NSEHINDPETRO


14WC5758NSEDISHTV


15
Worksheet: ap-Sheet1

_____ Workbook: LEVERAGE1.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G

1Stock Namepro timesultimate times


220MICRONSEQINE144J01027
19
26
36.35


3TCSEQINE253B01015
19
26
13.5


43IINFOTECHEQINE748C01020
29
39
2.05


53MINDIAEQINE470A01017
48
64
21299


65PAISAEQINE618L01018
31
41
129.5


763MOONSEQINE111B01023
30
40
99.15


88KMILESEQINE650K01021
27
36
56.5


9
Worksheet: Sheet1

If column E of ap.xls matches with column A of leverage.xlsx then copy column E of leverage.xlsx and paste it to column Z of ap.xls

After
example
cell E2 of ap.xls matches with column A3 of leverage.xlsx then copy E3 of leverage.xlsx and paste it to Z2 of ap.xls


_____ Workbook: ap.xls ( Using Excel 2007 32 bit )
Row\Col
B
C
D
E
Z

1AccountIdEntityNameExchg-SegSymbol


2WC5758NSETCS
25.823112


3WC5758NSESRTRANSFIN


4WC5758NSEMARICO


5WC5758NSEM&MFIN


6WC5758NSE20MICRONS
25.823112


7WC5758NSECONCOR


8WC5758NSECOALINDIA


9WC5758NSEBOSCHLTD


10WC5758NSEBERGEPAINT


11WC5758NSE5PAISA
40.795512


12WC5758NSETATAELXSI


13WC5758NSEHINDPETRO


14WC5758NSEDISHTV
Worksheet: ap-Sheet1

DocAElstein
08-26-2019, 12:01 PM
For http://www.excelfox.com/forum/showthread.php/2354-Copy-amp-Paste-by-a-Vba?p=11436&viewfull=1#post11436

Before:
_____ Workbook: ap.xls ( Using Excel 2007 32 bit )
Row\Col
B
C
D
E
Z

1AccountIdEntityNameExchg-SegSymbol


2WC5758NSETCS


3WC5758NSESRTRANSFIN


4WC5758NSEMARICO


5WC5758NSEM&MFIN


6WC5758NSE20MICRONS


7WC5758NSECONCOR


8WC5758NSECOALINDIA


9WC5758NSEBOSCHLTD


10WC5758NSEBERGEPAINT


11WC5758NSE5PAISA


12WC5758NSETATAELXSI


13WC5758NSEHINDPETRO


14WC5758NSEDISHTV
Worksheet: ap-Sheet1

_____ Workbook: LEVERAGE1.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F

1Stock Namepro timesultimate times


220MICRONSEQINE144J01027
19
26
36.35


3TCSEQINE253B01015
19
26
13.5


43IINFOTECHEQINE748C01020
29
39
2.05


53MINDIAEQINE470A01017
48
64
21299


65PAISAEQINE618L01018
31
41
129.5


763MOONSEQINE111B01023
30
40
99.15


88KMILESEQINE650K01021
27
36
56.5
Worksheet: Sheet1

After:
_____ Workbook: ap.xls ( Using Excel 2007 32 bit )
Row\Col
B
C
D
E
Z

1AccountIdEntityNameExchg-SegSymbol


2WC5758NSETCS
25.823112


3WC5758NSESRTRANSFIN


4WC5758NSEMARICO


5WC5758NSEM&MFIN


6WC5758NSE20MICRONS
25.823112


7WC5758NSECONCOR


8WC5758NSECOALINDIA


9WC5758NSEBOSCHLTD


10WC5758NSEBERGEPAINT


11WC5758NSE5PAISA
40.795512


12WC5758NSETATAELXSI


13WC5758NSEHINDPETRO


14WC5758NSEDISHTV
Worksheet: ap-Sheet1

DocAElstein
09-04-2019, 11:48 AM
In support of this Thread:
http://www.excelfox.com/forum/showthread.php/2364-Delete-row
http://www.excelfox.com/forum/showthread.php/2364-Delete-row

_____ Workbook: BasketOrder..xlsx ( Using Excel 2007 32 bit )
Row\ColABCDEFGHIJKLMNOPQ
1NSEEQACCNANANA010BUYMARKETNACLIMISDAYWC5758NA

2NSEEQADANIPORTSNANANA010SELLMARKETNACLIMISDAYWC57 58NA

3NSEEQAMBUJACEMNANANA010BUYMARKETNACLIMISDAYWC5758 NA

4NSEEQASIANPAINTNANANA010BUYMARKETNACLIMISDAYWC575 8NA

5NSEEQAXISBANKNANANA010BUYMARKETNACLIMISDAYWC5758N A

6NSEEQBANKBARODANANANA010SELLMARKETNACLIMISDAYWC57 58NA

7
Worksheet: BasketOrder. (1)


_____ Workbook: 1.xls ( Using Excel 2007 32 bit )
Row\ColABCDEFGHI
1ExchangeSymbolSeries/ExpiryOpenHighLow Prev CloseLTP

2NSEADANIPORTSEQ409409398.65407.2402

3NSEABCEQ216.2219.15215.15215.8218

4NSEASIANPAINTEQ14091441.951401.851404.21441.3

5NSEAXISBANKEQ732.9739.3728.15727.45733.65

6NSEBANKBARODAEQ118.8119.15114.7118.35115.25

7NSEBHARTIARTLEQ342.95348.5337.4342.55343.05

8
Worksheet: 1-Sheet1


The Process:
If cells of column C of basketorder.xlsx matches with cells of column B of 1.xlsx then delete the entire row of 1.xlsx(here entire row means the cells which matches delete that entire row)

_____ Workbook: BasketOrder..xlsx ( Using Excel 2007 32 bit )

NSEEQACCNANA

NSEEQADANIPORTSNANA

NSEEQAMBUJACEMNANA

NSEEQASIANPAINTNANA

NSEEQAXISBANKNANA

NSEEQBANKBARODANANA


Worksheet: BasketOrder. (1)

_____ Workbook: 1.xls ( Using Excel 2007 32 bit )

ExchangeSymbolSeries/ExpiryOpenHighLow Prev CloseLTP

NSEADANIPORTSEQ409409398.65407.2402

NSEABCEQ216.2219.15215.15215.8218

NSEASIANPAINTEQ14091441.951401.851404.21441.3

NSEAXISBANKEQ732.9739.3728.15727.45733.65

NSEBANKBARODAEQ118.8119.15114.7118.35115.25

NSEBHARTIARTLEQ342.95348.5337.4342.55343.05


Worksheet: 1-Sheet1

DocAElstein
09-04-2019, 03:03 PM
Using data from last post

Before=
_____ Workbook: 1.xls ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I

1ExchangeSymbolSeries/ExpiryOpenHighLow Prev CloseLTP


2NSEADANIPORTSEQ
409
409
398.65
407.2
402


3NSEABCEQ
216.2
219.15
215.15
215.8
218


4NSEASIANPAINTEQ
1409
1441.95
1401.85
1404.2
1441.3


5NSEAXISBANKEQ
732.9
739.3
728.15
727.45
733.65


6NSEBANKBARODAEQ
118.8
119.15
114.7
118.35
115.25


7NSEBHARTIARTLEQ
342.95
348.5
337.4
342.55
343.05


8
Worksheet: 1-Sheet1

After=
_____ Workbook: 1.xls ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I

1ExchangeSymbolSeries/ExpiryOpenHighLow Prev CloseLTP


2NSEABCEQ
216.2
219.15
215.15
215.8
218


3NSEBHARTIARTLEQ
342.95
348.5
337.4
342.55
343.05


4
Worksheet: 1-Sheet1




'
Sub Vixer7() ' http://www.excelfox.com/forum/showthread.php/2364-Delete-row
Rem 1 Workbook and worksheets info
'1a) Workbook info
Dim Wbm As Workbook: Set Wbm = ThisWorkbook ' The workbook containing macro
Dim Wb1 As Workbook, Wb2 As Workbook ' (These will be set later when the workbooks are opened)
Dim strWb1 As String: Let strWb1 = "1.xls"
Dim strWb2 As String: Let strWb2 = "BasketOrder.xlsx" ' "BasketOrder..xlsx"
'1b) Worksheets info
Dim Ws1 As Worksheet, Ws2 As Worksheet ' (These will be set later when the workbooks are opened)
Dim Lr1 As Long, Lr2 As Long: Let Lr1 = 7: Lr2 = 6 ' For sample file
Rem 2 Open files ..... we have to Open all the files all files are closed except the vba placed file
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\BasketOrder. .xlsx"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb2
Set Wb2 = ActiveWorkbook '
Set Ws2 = Wb2.Worksheets.Item(1)
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\1.xls"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb1
Set Wb1 = ActiveWorkbook ' The workbook just opened will now be the current active workbook
Set Ws1 = Wb1.Worksheets.Item(1)
Rem 3 The Process ..."....If cells of column C of basketorder.xlsx matches with cells of column B of 1.xlsx then delete the entire row of 1.xlsx...."....
' 3a) Range.Find Method range info
' 3a)(i) Search range ( range to be searched )
Dim rngSrch As Range: Set rngSrch = Ws2.Range("C1:C" & Lr2 & "") ' .."....column C of basketorder.xlsx
' 3a)(ii)' Data range, items to be searched for
Dim rngDta As Range: Set rngDta = Ws1.Range("B2:B" & Lr1 & "") ' .."....cells of column B of 1.xlsx
' 3b) MAIN LOOP for all cells in basketorder.xlsx
Dim Cnt As Long '_====================================MAIN LOOP===========================================
For Cnt = Lr2 To 1 Step -1 ' data range to be searched for.... Important: I am going to delete rows in a loop: usually do such delete things in a backward loop. This is because I then effectively do a process on a cell or cells "behind me". So the process is done on a cell or cells no longer being considered. If I do the looping conventionally in the forward direction, then modification caused by the delete may effect the cells above, particularly their position. This can cause problems: After a delete, the cells above "move down". On the next loop I will then consider a cell above where I just was. So I will likely miss the next row to be considered, since that now occupies the position of the current loop. An alternative would be to loop forward, but after a delete to reduce the Loop count, Cnt, by 1. But changing the loop count variable in a loop is generally considered to be a bad idea https://www.mrexcel.com/forum/excel-questions/803662-byte-backward-loop.html#post3929967
Dim MtchedCel As Variant ' For the range object of a matched cell if found, if not found it will be Nothing , so we must use a variant to allow for the type of Range or Nothing
Set MtchedCel = rngSrch.Find(What:=rngDta.Item(Cnt), After:=rngSrch.Item(1), LookIn:=xlValues, Lookat:=xlWhole, Searchdirection:=xlNext, MatchCase:=True) ' rngDta.Item(Cnt) will be a cell of column C of basketorder.xlsx
If Not MtchedCel Is Nothing Then ' If cell of column C of basketorder.xlsx matches with cells of column B of 1.xlsx Then .....
rngDta.Rows(Cnt).EntireRow.Delete Shift:=xlUp ' ..... delete the entire row of 1.xlsx
Else
End If

Next Cnt '_====================================MAIN LOOP============================================== =
Rem 4 ...."... after the process close and save the file so that changes should be saved
Wb1.Close savechanges:=True
End Sub

DocAElstein
09-05-2019, 10:52 AM
Extra notes in support of this Thread:
http://www.excelfox.com/forum/showthread.php/2364-Delete-row
http://www.excelfox.com/forum/showthread.php/2364-Delete-row?p=11463&viewfull=1#post11463
http://www.excelfox.com/forum/showthread.php/2364-Delete-row



Making Lr dynamic ( using rng.End(XlUp) for a single column. )

For example, from http://www.excelfox.com/forum/showthread.php/2364-Delete-row :
BasketOrder.xlsx for column C, Lr is 6
( BasketOrder.xlsx : https://app.box.com/s/v4b19po7jtjmh7wcswykbij3y896dv05
)
_____ Workbook: BasketOrder.xlsx ( Using Excel 2007 32 bit )
Row\ColBCD
1EQACCNA

2EQADANIPORTSNA

3EQAMBUJACEMNA

4EQASIANPAINTNA

5EQAXISBANKNA

6EQBANKBARODANA

7
Worksheet: BasketOrder. (1)

Lr2, for column C is :
Ws2.Range("C" & Ws2.Rows.Count).End(xlUp).Row
or
Ws2.Cells.Item(Ws2.Rows.Count, 3).End(xlUp).Row
or
Ws2.Cells.Item(Ws2.Rows.Count, "C").End(xlUp).Row

To explain:
'_- 1 :- Rows.Count Property of a worksheet
Ws2.Range("C" & Ws2.Rows.Count)
or
Ws2.Cells.Item(Ws2.Rows.Count, 3)
or
Ws2.Cells.Item(Ws2.Rows.Count, "C")

For Excel 2007 and higher versions ( .xlsx .xlsm ), this is 1048576 rows in a worksheet ( ImmediateWindow RowsCount XL 2007.JPG : https://imgur.com/NHHdylV )
Ws2.Range("C" & 1048576)
or
Ws2.Cells.Item(1048576, 3)
or
Ws2.Cells.Item(1048576, "C")
This is the last cell in column C:
_____ Workbook: BasketOrder.xlsx ( Using Excel 2007 32 bit )
Row\ColBCD
1048574

1048575

1048576
Worksheet: BasketOrder. (1)

So we are at the bottom of the worksheet….

'_- 2 :- .End(xlUp) Property action
This is the same as keyboard keys _ Ctrl+UpArrow
Ctrl + UpArrow.JPG : https://imgur.com/w5w8KxZ

….This action will take you back up to the next filled cell:
_End(XlUp).JPG : https://imgur.com/JQJxc1s

….So we are at the last filled cell in column C

'_- 3 :- .Row Property
This will give you the row number of the cell
_Row.JPG : https://imgur.com/bMpaBOv



For example, from http://www.excelfox.com/forum/showthread.php/2364-Delete-row :
1.xls for column B, Lr is 7
( 1.xls : https://app.box.com/s/beqlzzl3nwjff2ocyz4ox8twu5jnqd6e )
_____ Workbook: 1.xls ( Using Excel 2007 32 bit )
Row\ColABC
1ExchangeSymbolSeries/Expiry

2NSEADANIPORTSEQ

3NSEABCEQ

4NSEASIANPAINTEQ

5NSEAXISBANKEQ

6NSEBANKBARODAEQ

7NSEBHARTIARTLEQ

8
Worksheet: 1-Sheet1

Lr1, for column B is :
Ws1.Range("B" & Ws1.Rows.Count).End(xlUp).Row
or
Ws1.Cells.Item(Ws1.Rows.Count, 2).End(xlUp).Row
or
Ws1.Cells.Item(Ws1.Rows.Count, "B").End(xlUp).Row

To explain:
'_- 1 :- Rows.Count Property of a worksheet
Ws1.Range("B" & Ws1.Rows.Count)
or
Ws1.Cells.Item(Ws1.Rows.Count, 2)
or
Ws1.Cells.Item(Ws1.Rows.Count, "B")

For Excel 97 - 2003 ( .xls ), this is 65536 rows in a worksheet ( ImmediateWindow RowsCount XL 2003.JPG : https://imgur.com/iOmrf9n )
Ws1.Range("B" & 65536 ))
or
Ws1.Cells.Item( 65536 , 2)
or
Ws1.Cells.Item( 65536 , "B")

This is the last cell in column B:
(Last Worksheet Row in XL 2003.JPG : https://imgur.com/iaEPoZG )
2401
_____ Workbook: 1.xls ( Using Excel 2007 32 bit )
Row\ColABC
65533

65534

65535

65536
Worksheet: 1-Sheet1

So we are at the bottom of the worksheet …

'_- 2 :- .End(xlUp) Property action
This is the same as keyboard keys _ Ctrl+UpArrow
Ctrl + UpArrow.JPG : https://imgur.com/w5w8KxZ
2402

…This action will take you back up to the next filled cell:
_End(XlUp) XL2003.JPG : https://imgur.com/JYPd95V
2403

….So we are at the last filled cell in column B

'_- 3 :- .Row Property
This will give you the row number of the cell
_ Row.JPG : https://imgur.com/ZWCFvmr
2404




Example Demo
For uploaded files..
BasketOrder.xlsx : https://app.box.com/s/v4b19po7jtjmh7wcswykbij3y896dv05
1.xls : https://app.box.com/s/beqlzzl3nwjff2ocyz4ox8twu5jnqd6e
run this macro

Sub Vixer8_MakingLrDynamic() ' http://www.excelfox.com/forum/showthread.php/2364-Delete-row?p=11463&viewfull=1#post11463
'
Rem 1 Workbook and worksheets info
'1a) Workbook info
Dim Wbm As Workbook: Set Wbm = ThisWorkbook ' The workbook containing macro
Dim Wb1 As Workbook, Wb2 As Workbook ' (These will be set later when the workbooks are opened)
Dim strWb1 As String: Let strWb1 = "1.xls" ' --- 1.xls : https://app.box.com/s/beqlzzl3nwjff2ocyz4ox8twu5jnqd6e
Dim strWb2 As String: Let strWb2 = "BasketOrder.xlsx" ' "BasketOrder..xlsx" --- BasketOrder.xlsx : https://app.box.com/s/v4b19po7jtjmh7wcswykbij3y896dv05
'1b) Worksheets info
Dim Ws1 As Worksheet, Ws2 As Worksheet ' (These will be set later when the workbooks are opened)
' Dim Lr1 As Long, Lr2 As Long ' To be determined from files : Let Lr1 = 7: Lr2 = 6 ' For sample files
Rem 2 Open files ..... we have to Open all the files all files are closed except the vba placed file
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\BasketOrder. .xlsx"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb2
Set Wb2 = ActiveWorkbook '
Set Ws2 = Wb2.Worksheets.Item(1)
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\1.xls"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb1
Set Wb1 = ActiveWorkbook ' The workbook just opened will now be the current active workbook
Set Ws1 = Wb1.Worksheets.Item(1)



Rem 3 making Lr dynamic
Dim Lr2 As Long
Let Lr2 = Ws2.Range("C" & Ws2.Rows.Count).End(xlUp).Row
Let Lr2 = Ws2.Cells.Item(Ws2.Rows.Count, 3).End(xlUp).Row
Let Lr2 = Ws2.Cells.Item(Ws2.Rows.Count, "C").End(xlUp).Row
Dim Lr1 As Long
Let Lr1 = Ws1.Range("B" & Ws1.Rows.Count).End(xlUp).Row
Let Lr1 = Ws1.Cells.Item(Ws1.Rows.Count, 2).End(xlUp).Row
Let Lr1 = Ws1.Cells.Item(Ws1.Rows.Count, "B").End(xlUp).Row

'3b) demo
Ws2.Activate
MsgBox prompt:="Lr in worksheet " & Ws2.Name & ", in workbook " & Wb2.Name & " is " & Lr2 & vbCrLf & "(last row in worksheet is " & Ws2.Rows.Count & ")"
Ws1.Activate
MsgBox prompt:="Lr in worksheet " & Ws1.Name & ", in workbook " & Wb1.Name & " is " & Lr1 & vbCrLf & "(last row in worksheet is " & Ws1.Rows.Count & ")"

Rem 4 close files
Wb2.Close: Wb1.Close
End Sub








Ref:
https://www.excelforum.com/hello-introduce-yourself/1214555-an-old-geezer-coming-over-from-the-access-forum.html
http://www.excelfox.com/forum/showthread.php/2157-Re-Defining-multiple-variables-in-VBA?p=10192&viewfull=1#post10192
http://www.excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11466#post11466










BasketOrder.xlsx : https://app.box.com/s/v4b19po7jtjmh7wcswykbij3y896dv05
1.xls : https://app.box.com/s/beqlzzl3nwjff2ocyz4ox8twu5jnqd6e

DocAElstein
09-10-2019, 11:57 AM
in support of this Thread:
http://www.excelfox.com/forum/showthread.php/2369-Calculation-by-vba?p=11472#post11472
https://www.mrexcel.com/forum/excel-questions/1109256-add-calculation-vba.html
http://www.vbaexpress.com/forum/showthread.php?65832-Formula-by-vba
www.excelforum.com/excel-programming-vba-macros/1289175-add-a-calculation-by-vba.html




_____ Workbook: 124.xlsb ( Using Excel 2007 32 bit )
Row\ColABCDEF
1SymbolLTP1st row contains headers so ignore the first row

2ACC1587.95501333.878Column D is the result that I need by vba

3ADANIPORTS40270337.68I don't want formulas I need only the result in column D

4AMBUJACEM21820183.12

5ASIANPAINT1441.3101210.692

6AXISBANK733.655616.266

7BANKBARODA115.25796.81

8BHARTIARTL343.058288.162

9BOSCHLTD151501912726

10BPCL359350301.56

11

12Multiply the value of B2 by 1.5%, then multiply that result by 56 and then paste the result in D2

131333.878

14
Worksheet: Sheet1

_____ Workbook: sample.xlsx ( Using Excel 2007 32 bit )
Row\Col
E

12Multiply the value of B2 by 1.5%, then multiply that result by 56 and then paste the result in D2


13
=B2*(1.5/100)*56
Worksheet: Sheet1



Before
_____ Workbook: 124.xlsb ( Using Excel 2007 32 bit )
Row\ColABCD
2ACC1587.9550

3ADANIPORTS40270

4AMBUJACEM21820

5ASIANPAINT1441.310

6AXISBANK733.655

7BANKBARODA115.257

8BHARTIARTL343.058

9BOSCHLTD1515019

10BPCL359350
Worksheet: Sheet1

After
_____ Workbook: 124.xlsb ( Using Excel 2007 32 bit )
Row\ColABCD
2ACC1587.95501333.878

3ADANIPORTS40270337.68

4AMBUJACEM21820183.12

5ASIANPAINT1441.3101210.692

6AXISBANK733.655616.266

7BANKBARODA115.25796.81

8BHARTIARTL343.058288.162

9BOSCHLTD151501912726

10BPCL359350301.56
Worksheet: Sheet1

DocAElstein
09-10-2019, 12:57 PM
In support of this Thread:
http://www.excelfox.com/forum/showthread.php/2369-Calculation-by-vba?p=11472&viewfull=1#post11472
http://www.excelfox.com/forum/showthread.php/2369-Calculation-by-vba?p=11472&viewfull=1#post11472



i have data upto 100 or 200 rows it can be more all it depends i have to do the same process till the end of the data
So we need to make Lr dynamic, for example
sample.xlsx
_____ Workbook: sample.xlsx ( Using Excel 2007 32 bit )
Row\ColABCD
1SymbolLTP

2ACC1587.9550

3ADANIPORTS40270

4AMBUJACEM21820

5ASIANPAINT1441.310

6AXISBANK733.655

7BANKBARODA115.257

8BHARTIARTL343.058

9BOSCHLTD1515019

10BPCL359350

11
Worksheet: Sheet1




'
Sub Vixer8b_MakingLrDynamic() ' http://www.excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11474&viewfull=1#post11474
'
Rem 1 Workbook and worksheets info
'1a) Workbook info
Dim Wbm As Workbook: Set Wbm = ThisWorkbook ' The workbook containing macro
Dim Wb1 As Workbook ' (This will be set later when the workbooks are opened)
Dim strWb1 As String: Let strWb1 = "sample.xlsx"
'1b) Worksheets info
Dim Ws1 As Worksheet ' (This will be set later when the workbooks are opened)
' Dim Lr1 As Long, Lr2 As Long ' To be determined from files : Let Lr1 = 7: Lr2 = 6 ' For sample files
Rem 2 Open file .....
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb1
Set Wb1 = ActiveWorkbook ' The workbook just opened will now be the current active workbook
Set Ws1 = Wb1.Worksheets.Item(1)



Rem 3 making Lr dynamic
Dim Lr1 As Long
Let Lr1 = Ws1.Range("C" & Ws1.Rows.Count).End(xlUp).Row
Let Lr1 = Ws1.Cells.Item(Ws1.Rows.Count, 3).End(xlUp).Row
Let Lr1 = Ws1.Cells.Item(Ws1.Rows.Count, "C").End(xlUp).Row

'3b)(i) demo (i)
Ws1.Activate
MsgBox prompt:="Lr in worksheet " & Ws1.Name & ", in workbook " & Wb1.Name & " is " & Lr1 & vbCrLf & "(last row in worksheet is " & Ws1.Rows.Count & ")"

'3b)(ii) demo (ii)
Ws1.Range("C" & Ws1.Rows.Count).Select ' select last cell in column C
Application.Wait (Now + TimeValue("0:00:03")) ' VBA wait 3 seconds https://docs.microsoft.com/de-de/office/vba/api/excel.application.wait

ActiveCell.End(xlUp).Select ' go back up to last used cell in column C
Application.Wait (Now + TimeValue("0:00:06")) ' VBA wait 6 seconds

Rem 4 close file
Wb1.Close
End Sub



Rem 3 making Lr dynamic
Dim Lr1 As Long
Let Lr1 = Ws1.Range("C" & Ws1.Rows.Count).End(xlUp).Row
Let Lr1 = Ws1.Cells.Item(Ws1.Rows.Count, 3).End(xlUp).Row
Let Lr1 = Ws1.Cells.Item(Ws1.Rows.Count, "C").End(xlUp).Row



To explain:-

_ Rows.Count
Ws1.Range("C" & Ws1.Rows.Count)
Or
Ws1.Cells.Item(Ws1.Rows.Count, 3)
Or
Ws1.Cells.Item(Ws1.Rows.Count, "C")

We are in a .xlsx file, so Rows.Count is 1048576
Ws1.Range("C" & 1048576)
or
Ws1.Cells.Item(1048576, 3)
or
Ws1.Cells.Item(1048576, "C")

This is the last cell in column C:
Last cell in Column C in worksheet Sheet1 in workbook sample xlsx.JPG : https://imgur.com/HH9UKki
2413
_____ Workbook: sample.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1048574


1048575


1048576
Worksheet: Sheet1

So we are at the bottom of the worksheet…..

_ .End(XlUp) Property action
This is the same as keyboard keys _ Ctrl+UpArrow
Ctrl + UpArrow.JPG : https://imgur.com/w5w8KxZ
2402

…This action will take you back up to the next filled cell:
_End(XlUp) in column C from last cell in worksheet Sheet1 in workbook sample xlsx : https://imgur.com/fIDDbYB
2411

…so we are at the last cell in column C that is filled with something

_ .Row Property
This will return the row number or the cell to which it is applied.
_Row for current active cell.JPG : https://imgur.com/uKVAIgN
2412

DocAElstein
09-11-2019, 05:03 PM
Some further notes and information for this Thread:
http://www.excelfox.com/forum/showthread.php/2369-Calculation-by-vba?p=11476#post11476
http://www.excelfox.com/forum/showthread.php/2369-Calculation-by-vba
https://www.mrexcel.com/forum/excel-questions/1109256-add-calculation-vba.html
http://www.vbaexpress.com/forum/showthread.php?65832-Formula-by-vba
https://www.excelforum.com/excel-programming-vba-macros/1289175-add-a-calculation-by-vba.html


There are many different was to achieve the same…
Some further notes on changes that can be made to Sub Vixer9a() from here: http://www.excelfox.com/forum/showthread.php/2369-Calculation-by-vba?p=11475&viewfull=1#post11475



b) Rng.Value = Rng.Value

Excel VBA has been written such that applying .Value to a cell or cells has a similar effect to writing manually into a cell.

So if you do this:
Range("A1").Value = "X"
, it will write
X
in the first cell.
You will then see in the first cell this
X

If you do this:
Range("A1").Value = " = 1"
, it will write
= 1
in the first cell.
But, you will see in the first cell just the Value:
1

To explain:
The .Value Property of a range object , for example a single cell, is what we "see" in the cell. But if you apply .Value to a cell it will write into the cell as if you did it manually.

So, in your code you can replace this: …_

'3(iii) I need only result in the cell no formulas
Ws1.Range("D2:D" & Lr1 & "").Copy
Ws1.Range("D2:D" & Lr1 & "").PasteSpecial Paste:=xlPasteValues
Let Application.CutCopyMode = False

_.. with this:

'3(iii) I need only result in the cell no formulas
Let Ws1.Range("D2:D" & Lr1 & "").Value = Ws1.Range("D2:D" & Lr1 & "").Value



Sub Vixer9b() ' demo for rng.Value = rng.Value
Rem 1 Workbook and worksheets info
'1a) Workbook info
' Dim Wbm As Workbook: Set Wbm = ThisWorkbook ' The workbook containing macro
Dim Wb1 As Workbook ' This will be set later when the workbook is opened
Dim MyPath As String: Let MyPath = "C:\Users\sk\Desktop" ' ".....The file will be located in C:\Users\sk\Desktop ....
Dim strWb1 As String: Let strWb1 = "sample.xlsx" ' " ....and file name is sample.xlsx
'1b) Worksheets info
Dim Ws1 As Worksheet ' This will be set later when the workbook is opened)
Dim Lr1 As Long ' Let Lr1 = 10 for sample file , but we will determine it dynamically after opening the file
Rem 2 Open file "..... file is not opened so we have to open the file by vba
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\sample.xlsx"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb1 ' ...both files are located in same place
' Workbooks.Open Filename:=MyPath & "\" & strWb1 ' ...file will be located in C:\Users\sk\Desktop
Set Wb1 = ActiveWorkbook ' The workbook just opened will now be the current active workbook
Set Ws1 = Wb1.Worksheets.Item(1)

' make Lr1 dynamic .... http://www.excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11474&viewfull=1#post11474
Let Lr1 = Ws1.Range("C" & Ws1.Rows.Count).End(xlUp).Row
Rem 3 The Process ..."....
'3(i) ....Multiply the value of B2 by 1.5%, then multiply that result by 56 and then paste the result in D2.. formula will be added by me in the code, put that formula in
Ws1.Range("D2").Value = "=B2*(1.5/100)*56"
'3(ii) ....drag it
Ws1.Range("D2").AutoFill Destination:=Ws1.Range("D2:D" & Lr1 & ""), Type:=xlFillDefault
'3(iii) I need only result in the cell no formulas
Let Ws1.Range("D2:D" & Lr1 & "").Value = Ws1.Range("D2:D" & Lr1 & "").Value
Rem 4 save it and close it
Wb1.Save
Wb1.Close
End Sub





_c) Apply "fixed vector"** form across a range

I can apply the formula in its "fixed vector"** form across a range. In other words I can apply the same formula in its fixed vector form across a range. Applying the same fixed vector formula across a range will make any referred to cells change the shown formula appropriately to apply to the different cells

** In simplified terms, "fixed vector", means notation without the $. So..
A1 is "fixed vector"
$A$1 is absolute referencing

So we can replace this:


'3(i) ....Multiply the value of B2 by 1.5%, then multiply that result by 56 and then paste the result in D2.. formula will be added by me in the code, put that formula in
Ws1.Range("D2").Value = "=B2*(1.5/100)*56"
'3(ii) ....drag it
Ws1.Range("D2").AutoFill Destination:=Ws1.Range("D2:D" & Lr1 & ""), Type:=xlFillDefault
With this:

'3(i)(ii) ....Multiply the value of B2 by 1.5%, then multiply that result by 56 and then paste the result in D2.. ....drag it formula will be added by me in the code, put that formula in
Ws1.Range("D2:D" & Lr1 & "").Value = "=B2*(1.5/100)*56"


Sub Vixer9c() ' demo for fixed vector applied across a range
Rem 1 Workbook and worksheets info
'1a) Workbook info
' Dim Wbm As Workbook: Set Wbm = ThisWorkbook ' The workbook containing macro
Dim Wb1 As Workbook ' This will be set later when the workbook is opened
Dim MyPath As String: Let MyPath = "C:\Users\sk\Desktop" ' ".....The file will be located in C:\Users\sk\Desktop ....
Dim strWb1 As String: Let strWb1 = "sample.xlsx" ' " ....and file name is sample.xlsx
'1b) Worksheets info
Dim Ws1 As Worksheet ' This will be set later when the workbook is opened)
Dim Lr1 As Long ' Let Lr1 = 10 for sample file , but we will determine it dynamically after opening the file
Rem 2 Open file "..... file is not opened so we have to open the file by vba
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\sample.xlsx"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb1 ' ...both files are located in same place
' Workbooks.Open Filename:=MyPath & "\" & strWb1 ' ...file will be located in C:\Users\sk\Desktop
Set Wb1 = ActiveWorkbook ' The workbook just opened will now be the current active workbook
Set Ws1 = Wb1.Worksheets.Item(1)

' make Lr1 dynamic .... http://www.excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11474&viewfull=1#post11474
Let Lr1 = Ws1.Range("C" & Ws1.Rows.Count).End(xlUp).Row
Rem 3 The Process ..."....
'3(i)(ii) ....Multiply the value of B2 by 1.5%, then multiply that result by 56 and then paste the result in D2.. ....drag it formula will be added by me in the code, put that formula in
Ws1.Range("D2:D" & Lr1 & "").Value = "=B2*(1.5/100)*56"
'3(iii) I need only result in the cell no formulas
Let Ws1.Range("D2:D" & Lr1 & "").Value = Ws1.Range("D2:D" & Lr1 & "").Value
Rem 4 save it and close it
Wb1.Save
Wb1.Close
End Sub





_d) Internal calculation with VBA arrays
We do not need to put formulas into any cells.
We can do the calculations internally, within coding, and then paste all the values out in one go.
Using VBA arrays is a convenient way to do this.

_a) First we bring all the data into an array.
_b) Then we do the calculations
_c) Finally we paste out all the calculated values in one go

We can replace all of Rem3 with new coding
Rem 3 The Process .. using VBA arrays
'3_a) First we bring all the data into an array.
'3_b) Now we do the calculations
'3_c) Finally we paste out all the calculated values in one go

Rem 3 The Process ...using VBA arrays
'3_a) First we bring all the data into an array. (We also take in the column D values, even if the column D is empty)
Dim arrDta() As Variant
Let arrDta() = Ws1.Range("A1:D" & Lr1 & "").Value
'3_b) Now we do the calculations looping through the row data held internally in the data array, arrDta()
Dim Cnt As Long
For Cnt = 2 To Lr1
Let arrDta(Cnt, 4) = arrDta(Cnt, 2) * (1.5 / 100) * 56 ' .. like.. column "D" = column "B" * (1.5/100) * 56
Next Cnt
'3_c) Finally we paste out all the calculated values ( and also the original data ) in one go
Ws1.Range("A1:D" & Lr1 & "").Value = arrDta()

Sub Vixer9d() ' demo using VBA arrays
Rem 1 Workbook and worksheets info
'1a) Workbook info
' Dim Wbm As Workbook: Set Wbm = ThisWorkbook ' The workbook containing macro
Dim Wb1 As Workbook ' This will be set later when the workbook is opened
Dim MyPath As String: Let MyPath = "C:\Users\sk\Desktop" ' ".....The file will be located in C:\Users\sk\Desktop ....
Dim strWb1 As String: Let strWb1 = "sample.xlsx" ' " ....and file name is sample.xlsx
'1b) Worksheets info
Dim Ws1 As Worksheet ' This will be set later when the workbook is opened)
Dim Lr1 As Long ' Let Lr1 = 10 for sample file , but we will determine it dynamically after opening the file
Rem 2 Open file "..... file is not opened so we have to open the file by vba
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\sample.xlsx"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb1 ' ...both files are located in same place
' Workbooks.Open Filename:=MyPath & "\" & strWb1 ' ...file will be located in C:\Users\sk\Desktop
Set Wb1 = ActiveWorkbook ' The workbook just opened will now be the current active workbook
Set Ws1 = Wb1.Worksheets.Item(1)

' make Lr1 dynamic .... http://www.excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11474&viewfull=1#post11474
Let Lr1 = Ws1.Range("C" & Ws1.Rows.Count).End(xlUp).Row
Rem 3 The Process ...using VBA arrays
'3_a) First we bring all the data into an array. (We also take in the column D values, even if the column D is empty)
Dim arrDta() As Variant
Let arrDta() = Ws1.Range("A1:D" & Lr1 & "").Value
'3_b) Now we do the calculations looping through the row data held internally in the data array, arrDta()
Dim Cnt As Long
For Cnt = 2 To Lr1
Let arrDta(Cnt, 4) = arrDta(Cnt, 2) * (1.5 / 100) * 56 ' .. like.. column "D" = column "B" * (1.5/100) * 56
Next Cnt
'3_c) Finally we paste out all the calculated values ( and also the original data ) in one go
Ws1.Range("A1:D" & Lr1 & "").Value = arrDta()
Rem 4 save it and close it
Wb1.Save
Wb1.Close
End Sub




_e) Evaluate Range
see next post:

DocAElstein
09-13-2019, 12:40 PM
_e) Evaluate Range

It is possible to get array type calculations in Excel. Nobody fully understands this topic, and a lot of things are found by chance to work in a way such as to do array type calculations, or rather , array type results can be obtained.

Evaluate Range techniques often allow a looping process to be replaced ba a single line of code. Broadly this arises due to two things:
_1) Excel frequently updates all cells in a spreadsheet by going across the columns in a row , then down a row, then across the columns in the next row … etc.
Usually a user "using" a single cell is like when it selected, and/ or the carriage Return key is used, and so it appears to us as if the cell is Updated and displayed at one time. There are various ways to display more than one cell in a single spreadsheet update.
_2) In VBA there is an Evaluate Method ( https://docs.microsoft.com/en-us/office/vba/api/excel.application.evaluate ). In simplified terms, this allows calculation within VBA as if the calculations were written and done in a spreadsheet.

It is possible sometimes to get the Evaluate function to return an array representing the calculations across a range
There is no clear documentation on any of the array type things discussed in this post, and it is often suggested that getting array results in any form in Excel has occurred by chance and no one understands fully what is going on.


As an example, considering the last macro which looped to produce an array based on doing these calculations of this form, from down rows of 2 to Lr1
B2*(1.5/100)*56
B3*(1.5/100)*56
B4*(1.5/100)*56
_…. etc.

We find that Rem 3 from the last macro, Sub Vixer9d() , can be replaced by

Rem 3 The Process ... using Evaluate Range
Ws1.Range("D2:D" & Lr1 & "").Value = Ws1.Evaluate("=" & Range("B2:B" & Lr1 & "").Address & "*(1.5/100)*56")


The purpose of ("=" & Range("B2:B" & Lr1 & "") is to give us the formula form of like
=B2:B10
Hence the Range used does not need to be Qualified, such as by a worksheet, like in Ws1.Range
( There is an alternative form of Evaluate(" __ ") , which is often referred to as the "shorthand form" of Evaluate(" __ ") . It looks like this _ [ ___ ] _ . So you may now see what Mark L was suggesting here: https://www.excelforum.com/excel-programming-vba-macros/1289175-add-a-calculation-by-vba.html#post5190685 )

It is , however , important to qualify Evaluate. this is because we want to do an evaluation as if the formula within Evaluate(" ___ ") , was in the cell in worksheet, Ws1. If we omit the qualifying _ Ws1. _ , before the Evaluate , then we may do an evaluation of the formula in a different worksheet.



Sub Vixer9e() ' demo for Evaluate Range
Rem 1 Workbook and worksheets info
'1a) Workbook info
' Dim Wbm As Workbook: Set Wbm = ThisWorkbook ' The workbook containing macro
Dim Wb1 As Workbook ' This will be set later when the workbook is opened
Dim MyPath As String: Let MyPath = "C:\Users\sk\Desktop" ' ".....The file will be located in C:\Users\sk\Desktop ....
Dim strWb1 As String: Let strWb1 = "sample.xlsx" ' " ....and file name is sample.xlsx
'1b) Worksheets info
Dim Ws1 As Worksheet ' This will be set later when the workbook is opened)
Dim Lr1 As Long ' Let Lr1 = 10 for sample file , but we will determine it dynamically after opening the file
Rem 2 Open file "..... file is not opened so we have to open the file by vba
' Workbooks.Open Filename:="F:\Excel0202015Jan2016\ExcelFox\vixer\sample.xlsx"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWb1 ' ...both files are located in same place
' Workbooks.Open Filename:=MyPath & "\" & strWb1 ' ...file will be located in C:\Users\sk\Desktop
Set Wb1 = ActiveWorkbook ' The workbook just opened will now be the current active workbook
Set Ws1 = Wb1.Worksheets.Item(1)

' make Lr1 dynamic .... http://www.excelfox.com/forum/showthread.php/2345-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11474&viewfull=1#post11474
Let Lr1 = Ws1.Range("C" & Ws1.Rows.Count).End(xlUp).Row
Rem 3 The Process ... using Evaluate Range
Ws1.Range("D2:D" & Lr1 & "").Value = Ws1.Evaluate("=" & Range("B2:B" & Lr1 & "").Address & "*(1.5/100)*56")
Rem 4 save it and close it
Wb1.Save
Wb1.Close
End Sub






Using Evaluate often results in a much shorter coding.

For example, taking Sub Vixer9e() , and making a few other simplifications we can come up with a much shorter coding.



Sub Vixer9f() ' simplified coding ( using Range Evaluate )
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "sample.xlsx" ' ...both files are located in same place
Rem 3 The Process ... using Evaluate Range
ActiveSheet.Range("D2:D" & ActiveSheet.Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row & "").Value = ActiveSheet.Evaluate("=" & Range("B2:B" & ActiveSheet.Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row & "").Address & "*(1.5/100)*56")
Rem 4 save it and close it
ActiveWorkbook.Close savechanges:=True
End Sub






I personally do not like such coding because
_(i) They are more difficult to understand, especially at a later date,
_(ii) They are less flexible for adjustment.
_(iii) There may be some missing detail which might cause the coding to fail sometimes in certain circumstances

DocAElstein
09-13-2019, 04:41 PM
in support of this post:
https://excel.tips.net/T001940_Hiding_Rows_Based_on_a_Cell_Value.html
https://excel.tips.net/T001940_Hiding_Rows_Based_on_a_Cell_Value.html


Hello Ryanne
Rather than modifying the coding, it would probably be easier to use a simple "events" type coding which automatically kicks in when a range value is changed in a worksheet. Something of this form:.


Private Sub Worksheet_Change(ByVal Target As Range)
Target.EntireRow.Hidden = True
End Sub


































'Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
'End Sub

This coding will need to be in a worksheet code module.
Follow , for example these 6 steps to create such a coding:

_1) Right click on the tab of the worksheet of interest
_2) Select View Code
Worksheet code module via View Code after right click on tab.JPG : : https://imgur.com/ZiOuRVT
2426

_3) Select the left side drop down list
_4) Select Worksheet
Worksheet.JPG : https://imgur.com/tCwHKBo
2427

_5) Select the right drop down list
_6) Select Change
Change.JPG : https://imgur.com/NkbNPsL
2428

( Delete or ' comment out any other coding, such as the Private Sub Worksheet_SelectionChange which may have appeared automatically at step 4 )



You can now add your coding within the Private Sub Worksheet_Change


( Hit Alt+F11 to return to spreadsheet view )

The coding will kick off automatically when you change any cell value. It will hide the entire row which contains the cell whose value you changed


In the uploaded file , I have added the coding to the third worksheet code module

Alan

DocAElstein
10-04-2019, 04:18 PM
Some supporting notes for some other stuff...



_3) Regarding the remaining leftover hide.me app on Windows 7 machine after I de- installed it
….( hide.me that was still showing in my program list after I had de installed, and note also that on restarting the windows 7 machine with the remaining left over hideme app, a hideme typically window came up , did something for a while, then another hide me window came up and offered me the chance to buy premium!! )
Strange remaining hide me thing after de install.JPG : https://imgur.com/4HsLmDN
2439

I tried the Revo Unistaller as suggested, http://revo-uninstaller.en.softonic.com/ .
This was also not able to de install the hide.me that was still showing in my program list after I had de installed it: Revo also cannot de install the remaining hide.me.jpghttps://imgur.com/HY7pSIy
After this failed attempt, I performed the scan that Revo offered.
This scan took several hours. The scan first showed these left over registry things, Revo scan found left over hideme.jpg : https://imgur.com/r99WKN6
2440
, which I chose to delete: Choose to delete found left over hideme.jpg , Deleting scan found left over hideme.jpg : https://imgur.com/aoToZJ2 , https://imgur.com/5jsACjQ .
Then the following left over files and folders were also shown, Revo scan found left over hideme Files and Folders.jpg : https://imgur.com/78YKmd4
2441
, which I also chose to delete: Choose to delete Revo scan found left over hideme Files and Folders.jpg , Deletingf Revo scan found left over hideme Files and Folders.jpg : https://imgur.com/VAlBzED , https://imgur.com/2YoSSML .
Finally it appears that all left over hide.me files are gone: hideme no longer listed in programs.jpg : https://imgur.com/9aentWL
A restart is said to remove some files, .. Revo says remainig files will be deleted by restart.jpg : https://imgur.com/QTjDtf1 , so I restarted.
It seemed at this stage, ( after a restart) that the hideme app was completely removed.

DocAElstein
10-29-2019, 02:00 PM
In support of answers to these Threads:
http://www.excelfox.com/forum/showthread.php/2378-Mail-the-files-by-vba-to-a-specified-email-id
https://stackoverflow.com/questions/58525487/excel-vba-cdo-message-email-sending-accounts-work-less-and-less?noredirect=1#comment103375857_58525487
https://stackoverflow.com/questions/58286932/cdo-gmail-macro-some-accounts-work-some-don-t-message-could-not-be-sent-to-sm
https://stackoverflow.com/questions/58525487/excel-vba-cdo-message-email-sending-accounts-work-less-and-less







Register an account with Freemail German Telekom, for use with CDO.Message Send program
Login / Register
https://www.t-online.de/
Login.JPG : https://imgur.com/n5aLakd
https://accounts.login.idm.telekom.com/oauth2/auth?client_id=10LIVESAM30000004901PORTAL000000000 00000&state=d725154dc1fc296807eda1341546636892fc9739ccb7 5d714dc2c89b4159148e&claims=%7B%22id_token%22%3A%7B%22urn%3Atelekom.com %3Aall%22%3Anull%7D%7D&nonce=d725154dc1fc296807eda1341546636892fc9739ccb7 5d714dc2c89b4159148e&redirect_uri=https%3A%2F%2Flogin.t-online.de%2Fcallback&display=popup&scope=openid&response_type=code#
https://accounts.login.idm.telekom.com/oauth2/auth?client_id=10LIVESAM30000004901PORTAL000000000 00000&state=d725154dc1fc296807eda1341546636892fc9739ccb7 5d714dc2c89b4159148e&claims=%7B%22id_token%22%3A%7B%22urn%3Atelekom.com %3Aall%22%3Anull%7D%7D&nonce=d725154dc1fc296807eda1341546636892fc9739ccb7 5d714dc2c89b4159148e&redirect_uri=https%3A%2F%2Flogin.t-online.de%2Fcallback&display=popup&scope=openid&response_type=code#
Registrieren.JPG : https://imgur.com/J6nnDm2
https://meinkonto.telekom-dienste.de/telekom/account/registration/assistant/index.xhtml
https://meinkonto.telekom-dienste.de/telekom/account/registration/assistant/userstatus.xhtml
UserStatus.jpg : https://imgur.com/IqjhWop

New Email Address
New Email Address.jpg : https://imgur.com/zH2G73c

Register
Register.JPG : https://imgur.com/570UkbH
https://imgur.com/D6vRwex
You will probably be sent a number code via SMS to your Telephine number. , https://imgur.com/eBpabq5 ,

DocAElstein
11-06-2019, 05:06 PM
In support to answer of this Thread:
http://www.excelfox.com/forum/showthread.php/2383-compare-data?p=11557&viewfull=1#post11557

_____ Workbook: VBA.xls ( Using Excel 2007 32 bit )
Row\Col
A

1
1234


2
5678


3
91011


4
12131415


5
1617181920
Worksheet: abc
'match column A of abc sheet with column A of def sheet
' if it matches then delete that data in column A of def
' "match column A of abc sheet with column A of def sheet if it matches then delete that data in column A of def"

_____ Workbook: VBA.xls ( Using Excel 2007 32 bit )
Row\Col
A
B
C

1
1234


2
15678


3
191011


4
112131415


5
16171811920after the process completed delete all the data in this sheet
Worksheet: def
_____ Workbook: VBA Exampled.xls ( Using Excel 2007 32 bit )


15678


191011


112131415


16171811920
Worksheet: def
_____ Workbook: VBA Exampled.xls ( Using Excel 2007 32 bit )



'and the data which are not matched compare that data ( here 'that data' means unmatched data in abc. Right? ) with Fake Data and
' if matched then delete and again if there will be unmatched data ( here also 'unmatched data' means unmatched data in abc. Right? ) then
_____ Workbook: VBA.xls ( Using Excel 2007 32 bit )
Row\Col
A

1
115678


2
191011


3
1112131415


4
1.16172E+11
Worksheet: Fake Data
_____ Workbook: VBA Exampled.xls ( Using Excel 2007 32 bit )



15678


112131415


16171811920
Worksheet: def


115678


1112131415


1.16172E+11
Worksheet: Fake Data



'................................................. ...................if there will be unmatched data then
' compare that data with complete data
_____ Workbook: VBA.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
115678


2
Worksheet: Completed
' if found then delete and again if there will be unmatched data


1112131415


1.16172E+11
Worksheet: Fake Data
then
' copy that data and paste it to missing data sheet in column A ( and finally delete all the data in def : after the process completed delete all the data in this sheet )


the final result is in missing data sheet plz see
missing data sheet already has data and we have pasted the result below that data(the data starts with A2 is the result)
A1 in missing data sheet already has data so we putted the result below that plz see sir
....in simple words with def sheet the data which are present in column A doesnt match with any sheet column A data then put that data in missing data sheet sir (sheet can be many)

_____ Workbook: VBA.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
11111158


2
1112131415


3
1.16172E+11


4
Worksheet: Missing data
_____ Workbook: VBA Exampled.xls ( Using Excel 2007 32 bit )


11111158


1112131415


1.16172E+11
Worksheet: Missing data

DocAElstein
11-06-2019, 06:43 PM
follow on from last post:

Before

the final result is in missing data sheet plz see
missing data sheet already has data and we have pasted the result below that data(the data starts with A2 is the result)
A1 in missing data sheet already has data so we putted the result below that plz see sir
_____ Workbook: VBA Before.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
11111158


2


3


4
Worksheet: Missing data
_____ Workbook: VBA Before.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
1234


2
5678


3
91011


4
12131415


5
1617181920


6
Worksheet: abc
_____ Workbook: VBA Before.xls ( Using Excel 2007 32 bit )
Row\Col
A
B
C

1
1234


2
15678


3
191011


4
112131415


5
16171811920after the process completed delete all the data in this sheet
Worksheet: def
_____ Workbook: VBA Before.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
115678


2
191011


3
1112131415


4
1.16172E+11


5
Worksheet: Fake Data
_____ Workbook: VBA Before.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
115678


2
Worksheet: Completed
_____ Workbook: VBA Before.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
11111158


2


3


4
Worksheet: Missing data

DocAElstein
11-06-2019, 07:56 PM
Follow on from last 2 posts





Explanation attempt
Column A of worksheet abc is compared with column A of worksheet def, looking for matches in data. If data in Column A of worksheet def is also found in column A of worksheet abc, then that matched data in column A of worksheet def is deleted
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
1234


2
5678


3
91011


4
12131415


5
1617181920


6
Worksheet: abc
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )
Row\Col
A

1
1234


2
15678


3
191011


4
112131415


5
16171811920
Worksheet: def
Column A of worksheet abc is compared with column A of worksheet def, looking for matches in data. If data in Column A of worksheet def is also found in column A of worksheet abc, then that matched data in column A of worksheet def is deleted
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )


1234


15678


191011


112131415


16171811920
Worksheet: def (modified)


The remain data in worksheet def is now compared with column A of worksheet Fake Data.
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
115678


2
191011


3
1112131415


4
1.16172E+11


5
Worksheet: Fake Data
If data in Column A of worksheet Fake Data is also found in column A of the modified worksheet def, then that matched data in column A of worksheet Fake Data is deleted
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )


115678


191011


1112131415


1.16172E+11
Worksheet: Fake Data (modified)

The remaining data in column A of modified worksheet Fake Data is now compared with column A of worksheet Completed
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
115678


2
Worksheet: Completed
If there is a match in data in columns A of worksheet Completed, and column A of worksheet Fake Data, then delete that matched data from worksheet Fake Data
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )


115678


191011


1112131415


1.16172E+11
Worksheet: Fake Data (modified)

If there is now any remaining data in column A of modified Fake Data, then that data is added to column A of missing data , ( in the given example, VBA Before.xls , A1 in missing data sheet already had data
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )
Row\Col
A

1
11111158


2
Worksheet: Missing data
so we put the result below that:
_____ Workbook: VBA worked excample.xls ( Using Excel 2007 32 bit )
Row\Col
A
B

1
11111158


2
1112131415


3
1.16172E+11


4
Worksheet: Missing data (final)

DocAElstein
12-18-2019, 11:04 PM
Coding for this Thread
http://www.excelfox.com/forum/showthread.php/2390-Apply-Vlookup-formula-in-all-the-available-sheets-in-a-workbook?p=11794&viewfull=1#post11794



Sub MakeFormulas3() ' http://www.excelfox.com/forum/showthread.php/2390-Apply-Vlookup-formula-in-all-the-available-sheets-in-a-workbook?p=11794&viewfull=1#post11794
Rem 1 ' Workbooks info
' 1a This months book, this workbook. It is the outout book for the current month
Dim ThisMonthsLatestBook As Workbook, LisWbName As String
Set ThisMonthsLatestBook = ThisWorkbook ' ActiveWorkbook
Let LisWbName = ThisMonthsLatestBook.Name
If InStr(7, LisWbName, Format(Now(), "MMM"), vbTextCompare) = 0 Then MsgBox Prompt:="This workbook is not for " & Format(Now(), "MMMM"): Exit Sub
Dim BookN As Long
Let BookN = Mid(LisWbName, 5, InStr(5, LisWbName, "_", vbBinaryCompare) - 5)
' 1b Last months book
Dim sourceBookName As String
Let sourceBookName = "Book" & BookN - 1 & "_" & Format(DateAdd("m", -1, Now()), "MMM YYYY") & ".xlsm"
Dim sourceBook As Workbook
Set sourceBook = Workbooks.Open(ThisWorkbook.Path & "\" & sourceBookName)
Rem 2 Make records worksheet Sub MakeWorkSheetIfNotThere()
'Dim Wb As Workbook ' ' ' Dim: ' Preparing a "Pointer" to an Initial "Blue Print" in Memory of the Object ( Pigeon Hole with a bit of paper or code lines on that can be filled in to refer to a specific Objec of this type ) . This also us to get easily at the Methods and Properties throught the applying of a period ( .Dot) ( intellisense ) '
' Set Wb = ActiveWorkbook ' ' Set now (to Active Workbook - one being "looked at"), so that we carefull allways referrence this so as not to go astray through Excel Guessing inplicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 '
If Not Evaluate("=ISREF(" & "'" & "Records" & "'!Z78)") Then ' ( the ' are not important here, but iin general allow for a space in the worksheet name like "My Records"
ThisMonthsLatestBook.Worksheets.Add After:=ThisMonthsLatestBook.Worksheets.Item(Worksh eets.Count) 'A sheeet is added and will be Active
Dim wsRcds As Worksheet '
Set wsRcds = ThisMonthsLatestBook.Worksheets.Item(ThisMonthsLat estBook.Worksheets.Count) 'Rather than rely on always going to the active sheet, we referr to it Explicitly so that we carefull allways referrence this so as not to go astray through Excel Guessing implicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 ' Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191
wsRcds.Activate: wsRcds.Cells(1, 1).Activate ' ws.Activate and activating a cell sometimes seemed to overcome a strange error
Let wsRcds.Name = "Records"
Else ' The worksheet is already there , so I just need to set my variable to point to it
Set wsRcds = ThisWorkbook.Worksheets("Records")
End If
' End Sub
Rem 3 looping through worksheets
Dim C As Long, I As Long
'C = ActiveWorkbook.Worksheets.Count
'Let C = ThisWorkbook.Worksheets.Count
Let C = ThisMonthsLatestBook.Worksheets.Count - 1 ' -1 since last worksheet is records worksheet
'For I = 1 To C
'Application.ScreenUpdating = True
For I = 1 To C ' Sheet1 , Sheet2 , Sheet3 .......
'what are our worksheets? I = 1 , 2 , 3 ..........
Dim sourceSheet As Worksheet
Set sourceSheet = sourceBook.Worksheets.Item(I) ' ("Sheet1") , Sheet2 , Sheet3 ........
Dim outputSheet As Worksheet
Set outputSheet = ThisWorkbook.Worksheets.Item(I) ' ("Sheet1") , Sheet2 , Sheet3 ........

'Determine last row of source
With sourceSheet
Dim SourceLastRow As Long
SourceLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
With outputSheet
'Determine last row in col P
Dim OutputLastRow As Long
OutputLastRow = .Cells(.Rows.Count, "P").End(xlUp).Row
End With
'Apply our formula in records worksheet
With Worksheets("Records")
Let .Cells.Item(1, I).Value = sourceSheet.Name ' Header in column as worksheet name
'.Range("Q2:Q" & OutputLastRow).Formula = "=VLOOKUP($A2,'[" & sourceBook.Name & "]" & sourceSheet.Name & "'!$A$2:$P$" & SourceLastRow & ",3,0)"
.Range("" & CL(I) & "2:" & CL(I) & "" & OutputLastRow).Value = "=VLOOKUP(" & outputSheet.Name & "!$A2,'" & sourceBook.Path & "\" & "[" & sourceBook.Name & "]" & sourceSheet.Name & "'!$A$2:$P$" & SourceLastRow & ",3,0)"
' .Range("" & CL(I) & "2:" & CL(I) & "" & OutputLastRow).Value = .Range("" & CL(I) & "2:" & CL(I) & "" & OutputLastRow).Value
End With
'MsgBox ActiveWorkbook.Worksheets(I).Name
MsgBox ActiveWorkbook.Worksheets.Item(I).Name
Next I
'Next P
Rem 4
Dim cel As Range
With Worksheets("Records").UsedRange
For Each cel In .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
If IsError(cel.Value) Then
'
Else
If cel.Value < 3 Then
cel.Font.Color = vbRed
Else
cel.Font.Color = vbGreen
End If
End If
Next cel
End With

'Close the source workbook, don't save any changes
sourceBook.Close False
' Application.ScreenUpdating = True
End Sub
' https://www.excelforum.com/development-testing-forum/1101544-thread-post-appendix-no-reply-needed-please-do-not-delete-thanks-4.html#post4213980
Function CL(ByVal lclm As Long) As String 'Using chr function and Do while loop For example http://www.excelforum.com/excel-programming-vba-macros/796472-how-to-go-from-column-number-to-column-letter.html
Dim rest As Long 'Variable for what is "left over" after subtracting as many full 26's as possible
Do
' Let rest = ((lclm - 1) Mod 26) 'Gives 0 to 25 for Column Number "Left over" 1 to 26. Better than ( lclm Mod 26 ) which gives 1 to 25 for clm 1 to 25 then 0 for 26
' Let FukOutChrWithDoWhile = Chr(65 + rest) & FukOutChrWithDoWhile 'Convert rest to Chr Number, initially with full number so the "units" (0-25), then number of 26's left over (if the number was so big to give any amount of 26's in it, then number of 26's in the 26's left over (if the number was so big to give any amount of 26 x 26's in it, Enit ?
' 'OR
Let CL = Chr(65 + (((lclm - 1) Mod 26))) & CL
Let lclm = (lclm - (1)) \ 26 'This gives the number of 26's ( if any ), but just the excact part, in the next number down , - so applying the rest formula to this new number will again leave a difference "left over" rest.
'lclm = (lclm - (rest + 1)) \ 26 ' As the number is effectively truncated here, any number from 1 to (rest +1) will do in the formula
Loop While lclm > 0 'Only loop further if number was big enough to still have 0-25's in it
End Function

DocAElstein
12-19-2019, 06:28 PM
Notes in support of this Forum Question:
https://www.eileenslounge.com/viewtopic.php?f=18&t=33834

Trying to figure out how Excel Clipboard ( or maybe Office clipboard ) is interacting with the Windows clipboard when trying to paste into Excel a text string,….

I have a text string. I add to it, manipulate it a bit, then put it in "the clipboard", ( probably the windows clipboard ) , then do an Excel Worksheets Paste …

Simplified example…
I have this already in a string,
"A" & vbCr & vbLf & "C"
Seen in another way:
A_vbCr_vbLf_B
The first representation is in a typical code line convention, the second an attempt at a more "real" view
There are 4 characters there. The middle two are examples of types that are often referred to as "invisible" characters. (These two typically instruct systems to go to a new line)
Most software that visibly gives you some sort of text to see , would usually interpret that as two lines of text. For example, Excel would usually interpret that such as to display you something like this, if you somehow "put it in" the start ( top left ) of a spreadsheet:
Row\Col
A

1A


2C


I want to put an extra cell with split line text in it, simplified like this:
Row\Col
A

1A


2X
Y


3C


Sometime or other I have learnt that Excel recognises a single vbLf to split up lines of text within a cell. But it turns out to be bit more complicated than that if you want the text string in the Windows Clipboard to come out as you want it in Excel.

The second part of this macro seems to usually achieve the second screenshot above

Sub TestvbLf_1()
Dim objDataObject As Object: Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Dim StringBack As String
' Fill two rows , in 1 column
ActiveSheet.Cells.Clear ' This is important to remove any formatting that might distort results
objDataObject.SetText "A" & vbCr & vbLf & "C": objDataObject.PutInClipboard
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText()
Call WtchaGot(StringBack) ' "A" & vbCr & vbLf & "C"
' Put an extra cell with split line text in it
ActiveSheet.Cells.Clear '
objDataObject.SetText "A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C": objDataObject.PutInClipboard
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText()
Call WtchaGot(StringBack) ' "A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C"

End Sub

( The function, WtchaGot( ) can be found here: http://www.excelfox.com/forum/showthread.php/2302-quot-What%E2%80%99s-in-a-String-quot-VBA-break-down-Loop-through-character-contents-of-a-string?p=10946&viewfull=1#post10946 )



Here are some further sample code snippets and discussions

This code snippet suggest to me that the Windows clipboard is being used, as .Clear does not empty "the clipboard" , as one more typically annoyingly experiences in Excel work when copying things manually or with VBA in Excel

Sub TestvbLf_2()
Dim objDataObject As Object: Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Dim StringBack As String

' Put an extra cell with split line text in it
ActiveSheet.Cells.Clear '
objDataObject.SetText "A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C": objDataObject.PutInClipboard
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText()
Call WtchaGot(StringBack) ' --- "A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C"

ActiveSheet.Cells.Clear ' This does not clear the clipboard, so next line gives the same results, which...
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1") ' suggests that the Windows clipboard is being used
Call WtchaGot(StringBack) ' --- "A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C"
'
End Sub
Finally we see this, the orange of the clipboard icon indicating something is in "the clipboard", presumably the windows clipboard, since , as said, .Clear does not clear that icon, and also we see that the office clipboard is empty…
TestvbLf_2.JPG : https://imgur.com/dEbsaPE
2565

( Using Excel 2007 32 bit )

A19 Dez 2019
Lenf is 11A
"X
Y"
C

X
Y1 A65

C2 13

3
10

4 "34

5 X88

6
10

7 Y89

8 "34

9 13

10
10

11 C67
Worksheet: WotchaGotInString
The second two columns are produced by function WtchaGot( ) , and give a breakdown of the 11 characters in the string:
"A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C"
A vbCr vbLf " X vbLf Y " vbCr vbLf C

Further investigation in next post

DocAElstein
12-20-2019, 04:41 PM
In support of these posts

https://stackoverflow.com/questions/25091571/strange-behavior-from-vba-dataobject-gettext-returns-what-is-currently-on-the-c/54960767#54960767
https://www.eileenslounge.com/viewtopic.php?f=18&t=33834



Thoughts on adding split lines in Excel cells via the ( probably windows ) Clipboard

The following code snippet is typical of those which got me to the solution of how to manipulate a text string so that it pastes into Excel a cell with multiple lines.
The first section shows me what the text in "the clipboard" looks like after using Excel ways to copy my final desired test form , after using Excel ways to produce it. It gives this sort of output
"A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C" & vbCr & vbLf
A vbCr vbLf " X vbLf Y " vbCr vbLf C vbCr vbLf
TestvbLf_3.jpg : https://imgur.com/oPXJIkG
2566

Either code sections 2 and 3 would error, presumably because the windows clipboard has been emptied. That is not totally understandable. We know that we had something in the windows clipboard. Doing things that empty "clipboards" , possibly other than the window clipboard, seem also somehow to remove things from the windows clipboard.
Possibly we could explain this by saying that as Excel filled the windows clipboard as a sort of extra thing to do after primarily filling its clipboard, then some linking wiring in place to do that also resulted into it clearing the windows clipboard when it cleared its clipboard
Code section 4 erroring is less understandable, as we did not use normal Excel ways to fill the window clipboard, but never the less .Clear seems to empty it.
Code section 5 erroring is similarly less understandable, since it is generally considered that Application.CutCopyMode = False clears the Excel clipboard

Before going on to sections 7 and 8, copy something to the "clipboard" from anywhere.
We find that section 7 and 8 would still error. This once again seems to be caused by either .Clear or .CutCopyMode = False. It suggests that there is some link to the windows clipboard that causes it to be cleared. It suggests perhaps that something has been set to link things in the windows clipboard from Excel or office, possibly to get some formatting parameters. If you put anything into the windows clipboard, it will still be cleared when doing .Clear or .CutCopyMode = False , by virtue of this linking "wiring"

Section 9 probably removes this linking wiring.
When a manual copy is then made in the following sections , possibly a new wiring is set up which has a different sort of dependency.

Before going on to section 10 and then again before going on to section 11, copy something to the "clipboard" from anywhere.
The code lines of .Clear or .CutCopyMode = False at the start of these sections do not remove the orange from the icon top left, and code sections 10 and 11 do not error. This supports the idea that a link was made to the windows clipboard that works slightly differently.




Sub TestvbLf_3()
ActiveSheet.Cells.Clear


Dim objDataObject As Object: Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Dim StringBack As String
' Section 1
ActiveSheet.Range("A1").Value = "A"
ActiveSheet.Range("A2").Value = "X" & vbLf & "Y"
ActiveSheet.Range("A3").Value = "C"
ActiveSheet.Range("A1:A3").Copy
objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText()
Call WtchaGot(StringBack)
'ActiveSheet.Cells.Clear ' --- This clears "the clipboard",
ActiveSheet.Paste Destination:=ActiveSheet.Range("D1")

' Section 2
' ActiveSheet.Cells.Clear ' --- This clears "the clipboard"
' objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText() ' This errors
' Call WtchaGot(StringBack)

' Section 3
' Application.CutCopyMode = False
' objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText() ' This errors
' Call WtchaGot(StringBack)

' Section 4
' objDataObject.SetText "A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C": objDataObject.PutInClipboard
' ActiveSheet.Cells.Clear
' objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText() ' This errors
' Call WtchaGot(StringBack)

' Section 5
' objDataObject.SetText "A" & vbCr & vbLf & """" & "X" & vbLf & "Y" & """" & vbCr & vbLf & "C": objDataObject.PutInClipboard
' Application.CutCopyMode = False
' objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText()
' Call WtchaGot(StringBack)

Stop ' BEFORE DOING THE NEXT CODE SECTIONs, copy something manually via Ctrl+c ...
' Section 7
' ActiveSheet.Cells.Clear
' objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText() ' This errors
' Call WtchaGot(StringBack)
'
'' Section 8
' Application.CutCopyMode = False
' objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText() ' This errors
' Call WtchaGot(StringBack)

' Section 9
ActiveSheet.Cells.Clear ' This I think breaks the link from other clipboards to the windows clipboard.
' Application.CutCopyMode = False ' this line as alternative to the last has the same effect

Stop ' BEFORE DOING THE NEXT CODE SECTIONs, copy something manually via Ctrl+c ...

' Section 10
ActiveSheet.Cells.Clear
objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText()
Call WtchaGot(StringBack)
ActiveSheet.Paste Destination:=ActiveSheet.Range("E1")

Stop ' BEFORE DOING THE NEXT CODE SECTIONs, copy something manually via Ctrl+c ...

' Section 11
Application.CutCopyMode = False
objDataObject.GetFromClipboard: Let StringBack = objDataObject.GetText()
Call WtchaGot(StringBack)
ActiveSheet.Paste Destination:=ActiveSheet.Range("H1")

End Sub

DocAElstein
12-21-2019, 05:02 PM
Some notes in support of these Threads
http://www.eileenslounge.com/viewtopic.php?f=18&t=33775
http://www.eileenslounge.com/viewtopic.php?f=18&t=33834&sid=f48aa968fa8fe7f9f789cda2d0d7141c#p262009
http://www.excelfox.com/forum/showthread.php/2384-VPN-Forum-access-and-IP-addresse-Tests?p=11570&viewfull=1#post11570
http://www.excelfox.com/forum/showthread.php/2384-VPN-Forum-access-and-IP-addresse-Tests?p=11608&viewfull=1#post11608



VPN and IP Addresses
Some of the initial investigations into testing VPN and in looking at problems showed that it was useful to be able to monitor various IP addresses.
The main (Public) address, as already discussed, ( http://www.excelfox.com/forum/showthread.php/2384-VPN-Forum-access-and-IP-addresse-Tests?p=11597&viewfull=1#post11597 ) , is of course important to know . There is also a "local host", which more typically is set to the same number for everyone, (127.0.0.1 ). This is a number which conventionally is used to allow direct access to network aspects of your computer which might otherwise be accessed externally in some way or another. A characteristic of VPN software is that it manipulate your computer in a way such that, amongst other things , this number will change to the internal address used at your VPN provider to identify you within their system. It is part of the trickery in the Client software, that you "looking at yourself" gets manipulated into looking somewhere else. The provider in some ways is then in control of your computer allowing them to give the impression that your computer is physically somewhere else: Part of your computer "Soul" is with them.

Public address
Manually this is achieved typically by visiting various sites that provide you with this information. The automated way still needs to use such sites. The reason for this is that you need to be able to get the information by accessing yourself in the way that another computer connected to the internet "gets at you". Part of this process involves obtaining your public address as you communicate initially with them. We could scrap any site offering the service and pick out the IP address information.
We can simplify the coding to do this by accessing a site available which only gives the IP information, and which shows as the website that you "see" just that IP address number.
So for example if you type in your browser URL bar, http://myip.dnsomatic.com/ , then all you will see is the IP address. You will even see only that if you are in Google Chrome Browser and right click and view the Page Source
Page Source myip dnsomatic .JPG : https://imgur.com/uceUKE4

This information will be the entire .responseText received back. In normal scrapping coding you might feed this supplied text string into an object model software which allows you to then pick out using OOP type techniques what you want. If we use the site http://myip.dnsomatic.com/ , we don't need to take that extra step, and can simply view the entire .responseText , as this is the exact info we want.

( I found that sometimes the first one or few attemps did not work in the next coding, but almost always after a few attemopts it worked. So the recursion technique is used to call the Function a few times , if necerssary )


Option Explicit
Sub TestPubicIP()
Dim strIP As String
Call PubicIP(strIP)
MsgBox prompt:=strIP
'Call WtchaGot(strIP)
End Sub
' Because we have ByRef PublicIP , the is effectively taking the variable strIP into the function, and similarly in the recursion Call line that variable is taken. Hopefull in one of the 5 attepts at running the Function it will be filled.. We don't actually fill the pseudo variable PubicIP so no value is returned directly by the Function. (So we could have used a Sub()routine instead) To get a returned value we look at the value in strIP after runing the routine , because , as said, hopefully that particular variable will have been added to
Function PubicIP(ByRef PublicIP As String, Optional ByVal Tries As Long) As String
If Tries = 5 Then Exit Function
On Error GoTo Bed
With CreateObject("msxml2.xmlhttp")
.Open "GET", "http://myip.dnsomatic.com", True ' 'just preparing the request type, how and what type... "The True/False argument of the HTTP Request is the Asynchronous mode flag. If set False then control is immediately returns to VBA after Send is executed. If set True then control is returned to VBA after the server has sent back a response.
'No extra info here for type GET
'.setRequestHeader bstrheader:="Ploppy", bstrvalue:="Poo"
.setRequestHeader bstrheader:="If-Modified-Since", bstrvalue:="Sat, 1 Jan 2000 00:00:00 GMT" ' https://www.autohotkey.com/boards/viewtopic.php?t=9554 --- It will caching the contents of the URL page. Which means if you request the same URL more than once, you always get the same responseText even the website changes text every time. This line is a workaround : Set cache related headers.
.send ' varBody:= ' No extra info for type GET. .send actually makes the request
While .readyState <> 4: DoEvents: Wend ' Allow other processes to run while the web page loads. Think this is part of the True option
Dim PageSrc As String: Let PageSrc = .responseText ' Save the HTML code in the (Global) variable. ': Range("P1").Value = PageSrc 'For me for a print out copy to text file etc. The responseText property returns the information requested by the Open method as a text string
End With
Let PublicIP = PageSrc: ' Debug.Print PubicIP
'Call WtchaGot(PubicIP)
If PublicIP = "" Then Call PubicIP(PublicIP, Tries + 1) ' Recursion Call line. I do this because sometines it seems to need more than one try before it works
Exit Function
Bed:
Let PubicIP = Err.Number & ": " & Err.Description: Debug.Print PubicIP
End Function


As an alternative , I have below a similar coding. It gets the page source from another site which shows your IP address. I found when looking at the page source in Google Chrome, that I could see the IP address conveniently showing between two simple text lines :
Page Source whatismyipaddress_com .JPG : https://imgur.com/LSvORAe
2567

To VBA ( or most computer things), that text looks like a long string, and at that point we can imagine that it looks to the computer like any one of these 3 representations
……. ipt -->" & vbLf & "87" & "." & "101" & "." & "95" & "." & "204" & vbLf & "<!—do not scr……..
…….ipt --> vbLf 87.101.95.204 vbLf <!—do not scr ………….

…….ipt --> vbLf
87.101.95.204 vbLf
<!—do not scr ………….

We apply some simple VBA strings manipulation techniques to extract just the IP address number

'
Sub TestPubicIPwhatismyipaddress_com()
Dim strIP As String
Let strIP = PubicIPwhatismyipaddress_com
MsgBox prompt:=strIP
End Sub
Function PubicIPwhatismyipaddress_com() As String
On Error GoTo Bed
With CreateObject("msxml2.xmlhttp")
.Open "GET", "https://whatismyipaddress.com/de/meine-ip", False ' 'just preparing the request type, how and what type... "The True/False argument of the HTTP Request is the Asynchronous mode flag. If set False then control is immediately returns to VBA after Send is executed. If set True then control is returned to VBA after the server has sent back a response.
'No extra info here for type GET
'.setRequestHeader bstrheader:="Ploppy", bstrvalue:="Poo"
.setRequestHeader bstrheader:="If-Modified-Since", bstrvalue:="Sat, 1 Jan 2000 00:00:00 GMT" ' https://www.autohotkey.com/boards/viewtopic.php?t=9554 --- It will caching the contents of the URL page. Which means if you request the same URL more than once, you always get the same responseText even the website changes text every time. This line is a workaround : Set cache related headers.
.send ' varBody:= ' No extra info for type GET. .send actually makes the request
While .READYSTATE <> 4: DoEvents: Wend ' Allow other processes to run while the web page loads. Think this is part of the True option
Dim PageSrc As String: Let PageSrc = .responsetext ' Save the HTML code in the (Global) variable. ': Range("P1").Value = PageSrc 'For me for a print out copy to text file etc. The responseText property returns the information requested by the Open method as a text string
End With
Let PubicIPwhatismyipaddress_com = PageSrc: ' Debug.Print PubicIPwhatismyipaddress_com
Dim IPadres As String, posIPadres1 As Long, posIPadres2 As Long
Let posIPadres1 = InStr(1, PageSrc, "<!-- do not script -->", vbBinaryCompare) ' Screenshot ---> Page Source whatismyipaddress_com .JPG : https://imgur.com/LSvORAe
Let posIPadres2 = InStr(posIPadres1 + 1, PageSrc, "<!-- do not script -->", vbBinaryCompare)
Let PubicIPwhatismyipaddress_com = Mid(PageSrc, posIPadres1 + 23, ((posIPadres2 - 1) - (posIPadres1 + 23)))
Call WtchaGot(PubicIPwhatismyipaddress_com)
Exit Function
Bed:
Let PubicIPwhatismyipaddress_com = Err.Number & ": " & Err.Description: Debug.Print PubicIPwhatismyipaddress_com
End Function



Local Host address and computer name in the next post

DocAElstein
12-22-2019, 05:55 PM
Local Host address, Computer name
There are a couple of Win32 APIs which will get this information.
We just need to write a small amount of coding to get the function to do what we want and also a bit of manipulaation to give the information as we need it.
For the computer name this is simply a function to give us a string.

Option Explicit
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long
' "GetComputerNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long
Function ComputerName() As String ' GHB and sex..
Dim NmeLen As Long, lngX As Long, strCompName As String
Let NmeLen = 999: Let strCompName = " " ' variables must be initialised or API things often dont work ' String$(50, 0)
Let lngX = GetComputerName(strCompName, NmeLen) '
If lngX <> 0 Then ' returns 1 if it works
Let ComputerName = strCompName ' Left$(strCompName, NmeLen) ' The first argument variable gets like a LSet done on it
Else
Let ComputerName = "Couldn't get Computer name"
End If
Let ComputerName = Left$(ComputerName, NmeLen) ' We must do this as there is a Chr(0) after the name .... Let ComputerName = Trim(ComputerName) ' this is no good, - it leaves Chr(0) on the end which means that ComputerName is the last thing that will get printed
'Call WtchaGot(ComputerName)
End Function






The Win32 API for the local IP address is slightly more complicated. It will give us a table/ array of all the IP addresses held. The first is generally that we are interested in. it seems to be added when a VPN connection is made

Option Explicit
Private Declare Function GetIpAddrTable_API Lib "IpHlpApi" Alias "GetIpAddrTable" (ByRef pIPAddrTable As Any, ByRef pdwSize As Long, ByVal bOrder As Long) As Long ' http://www.source-code.biz/snippets/vbasic/8.htm
' "GetIpAddrTable" (ByRef pIPAddrTable As Any, ByRef pdwSize As Long, ByVal bOrder As Long) As Long
Public Function GetIpAddrTable() As String ' Christian d'Heureuse, www.source-code.biz http://www.source-code.biz/snippets/vbasic/8.htm
Rem 1 We give the API function some info , and that seems to make it fill up an array with table values
Dim Buf(0 To 1234) As Byte ' Buf(0 To 511) As Byte ' must be Byte or overflow at NrOfEntries
Dim BufSize As Long: Let BufSize = 12345
Dim rc As Long: Let rc = GetIpAddrTable_API(Buf(0), BufSize, 1)
'If rc <> 0 Then Err.Raise vbObjectError, , "GetIpAddrTable failed with return value " & rc
Dim NrOfEntries As Integer: NrOfEntries = Buf(1) * 256 + Buf(0)
'If NrOfEntries = 0 Then GetIpAddrTable = Array(): Exit Function

Dim i As Long
For i = 0 To NrOfEntries - 1
Dim j As Long, s As String
For j = 0 To 3
Dim Indcy As Long: Let Indcy = 4 + i * 24 + j
s = s & IIf(j > 0, ".", "") & Buf(Indcy): Debug.Print Indcy & " " & Buf(Indcy) ' This code line just builds the final string for each IP address, with a "." before all but the first of the 4 number parts --- for example like 192 . 168 . 2 . 110
Next j
Dim strIPs As String: Let strIPs = strIPs & " " & s: Let s = ""
Next
GetIpAddrTable = strIPs: Debug.Print strIPs
End Function

' 4 127
' 5 0
' 6 0
' 7 1
' 28 192
' 29 168
' 30 2
' 31 110
' 127.0.0.1 192.168.2.110 ' _

' 4 10
' 5 132
' 6 13
' 7 113
' 28 127
' 29 0
' 30 0
' 31 1
' 52 192
' 53 168
' 54 2
' 55 110
' 10.132.13.113 127.0.0.1 192.168.2.110
' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
' 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
' 49 50 51 52 53 54 55
' 10 132 13 127
' 127 0 0 1
' 192 168 2 110


If we examine that coding above, and experiment with what it does, we see a couple of things:
Rem 1
_ It is doing a strange thing, as API's often do. That is to say the API works similarly to a normal VBA function, except the way each argument is a mystery.. following some set of rules/coding which probably the author wrote when he was drunk and no one can remember anymore.
You must make an array of Byte types. The array should be fairly big.
You must give the first array element and the size of the array to the API Function.
Then magically the array gets filled. Presumably some internally held table is put into the array
Rem 2
A bit of maths is done to pick out the elements we want from the returned filled array

The final analysis here of a typical output can be helpful to try and understand another way to get this information

' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
' 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
' 49 50 51 52 53 54 55
' 10 132 13 127
' 127 0 0 1
' 192 168 2 110

Or maybe not. I am not sure. I doubt many people are…

DocAElstein
12-27-2019, 04:49 PM
Coding in support of this post
http://www.excelfox.com/forum/showthread.php/2392-VBA-Copy-files-in-excel-edit-and-save?p=11808&viewfull=1#post11808



Option Explicit '
Sub txtfilesinworksheetwithFILENAMEColumnB() ' http://www.excelfox.com/forum/showthread.php/2392-VBA-Copy-files-in-excel-edit-and-save?p=11808&viewfull=1#post11808
Rem 1 Worksheets info
Dim WsFlNme As Worksheet
Set WsFlNme = ThisWorkbook.Worksheets("FILENAME")
Rem 2 Copy .txt files in worksheets
'2a) Copy .txt files in worksheet with FILENAME (Column B)
'2a)(i) Get the entire text file as a string
Dim FileNum As Long: Let FileNum = FreeFile(1) ' The "highway/ street/ link" to be built to transport the text will be given a number. It must be unique. So we use for convenience, the Freefile function: it returns an integer that represents the next file number that the Open statement can use. The optional argument for the range number is a variant that is used to specify a range from which the next free file number is returned. Enter a value of data type 0 (default) to return a file number in the range 1 - 255 inclusive. Enter 1 to return a file number in the range 256 - 511. https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/freefile-function . Note also : Use file numbers in the range 1-255, inclusive, for files not accessible to other applications. Use file numbers in the range 256-511 for files accessible from other applications
Dim PathAndFileName As String, strtxtFile As String
Let PathAndFileName = ThisWorkbook.Path & "\vbadumb.txt"
Open PathAndFileName For Binary As #FileNum 'Open Route to data. Binary is a fundemental type data input...
strtxtFile = VBA.Strings.Space$(LOF(FileNum)) '....and wot recives it hs to be a string of exactly the right length
Get #FileNum, , strtxtFile 'The Get statement reads back from an open route to data into the given variable
Close #FileNum
' Call WtchaGot(strtxtFile) ' --- If we were to examine that string in strtxtFile, then we would see something like "1" & vbCr & vbLf & "2" & vbCr & vbLf & "3"
Rem 3 Put the text data inti the (Windows clipboard)
Dim objDataObject As Object: Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dataobject-object A holding area for formatted text data used in transfer operations. Also holds a list of formats corresponding to the pieces of text stored in the DataObject. .....
' .....A DataObject can contain one piece of text for the Clipboard text format, and one piece of text for each additional text format, such as custom and user-defined formats. A DataObject is distinct from the Clipboard. A DataObject supports commands that involve the Clipboard and drag-and-drop actions for text. When you start an operation involving the Clipboard (such as GetText) or a drag-and-drop operation, the data involved in that operation is moved to a DataObject. The DataObject works like the Clipboard. If you copy a text string to a DataObject, the DataObject stores the text string. If you copy a second string of the same format to the DataObject, the DataObject discards the first text string and stores a copy of the second string. It stores one piece of text of a specified format and keeps the text from the most recent operation.
objDataObject.SetText strtxtFile: objDataObject.PutInClipboard ' This often seems to result in putting infomation into the Windows Clipboard
Rem 4 Paste out to the worksheet
WsFlNme.Paste Destination:=WsFlNme.Range("B1") ' If we paste the entire string in / at B1 , then the vbCr & vbLf in the string will be interpreted by Excel as the row seperator, so the entire string will be split over 3 lines
End Sub

DocAElstein
12-31-2019, 01:57 AM
In support of theses Threads:
http://www.eileenslounge.com/viewtopic.php?f=21&p=249846#p249846
http://www.excelfox.com/forum/showthread.php/2336-Excel-and-XP-Operating-System-Tests-(proc-entry-pt-quot-GetDataFormEX-quot-not-found-in-the-DLL-quot-KERNEL32)
http://www.excelfox.com/forum/showthread.php/2242-Excel-2003-ActiveX-controls-embedded-in-worksheet-not-working-then-can%E2%80%99t-even-insert-them-*SOLVED*?p=10923&viewfull=1#post10923





The procedure entry point "EnumCalendarInfoExEx" was not found in the DLL "KERNEL32.dll"


I thought I had been sensible and chosen a safe option in XP of download but manually determine Install time
Updates Option Download but manually determine Install time.jpg : https://imgur.com/ocsOVbl , https://imgur.com/X0eB8AG
But somehow I got a full load of updates at some point recently on one of my XP machines, possibly at the point of turning the Laptop off.

I noted manually all the office updates and did various comparisons with my list of "Good" and "Bad" updates, but that only revealed as possible bads , the Active X control Killer , KB3054873. Sure enough my control buttons were dead, but after removing KB3054873. They immediately started working again.

None of the XP killing known bads were found, but some I have not previously seen were found.
Update für Microsoft Outlook 2010 (KB4475604) 32-Bit-Edition Letzte Änderung: 08.10.2019
Sicherheitsupdate für Microsoft Excel 2010 (KB4484130) 32-Bit-Edition Letzte Änderung: 03.10.2019
Sicherheitsupdate für Microsoft Office 2010 (KB4475569) 32-Bit-Edition Letzte Änderung: 03.10.2019
Sicherheitsupdate für Microsoft Office 2010 (KB4475599) 32-Bit-Edition Letzte Änderung: 05.09.2019
Sicherheitsupdate für Microsoft Office 2010 (KB4464566) 32-Bit-Edition Letzte Änderung: 05.09.2019
Sicherheitsupdate für Microsoft Word 2010 (KB4475533) 32-Bit-Edition Letzte Änderung: 08.08.2019
Update für Microsoft Filter Pack 2.0 (KB3114879) 32-Bit-Edition Letzte Änderung: 09.07.2019


https://www.catalog.update.microsoft...px?q=KB4475604
Updatedetails
Update für Microsoft Outlook 2010 (KB4475604) 32-Bit-Edition
Letzte Änderung: 08.10.2019
Größe: 79,8 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Outlook 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Outlook 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 4475604
Weitere Informationen:
https://support.microsoft.com/kb/4475604
Support-URL:
https://support.microsoft.com/?LN=de-de

https://www.catalog.update.microsoft...px?q=KB3114879
Updatedetails
Update für Microsoft Filter Pack 2.0 (KB3114879) 32-Bit-Edition
Letzte Änderung: 09.07.2019
Größe: 4,4 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Filter Pack 2.0 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Filter Pack 2.0 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 3114879
Weitere Informationen:
https://support.microsoft.com/kb/3114879
Support-URL:
https://support.microsoft.com/?LN=de-de




https://www.catalog.update.microsoft...px?q=KB4475604
Updatedetails
Update für Microsoft Outlook 2010 (KB4475604) 32-Bit-Edition
Letzte Änderung: 08.10.2019
Größe: 79,8 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Outlook 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Outlook 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 4475604
Weitere Informationen:
https://support.microsoft.com/kb/4475604
Support-URL:
https://support.microsoft.com/?LN=de-de





https://www.catalog.update.microsoft...px?q=KB4464566
Updatedetails
Sicherheitsupdate für Microsoft Office 2010 (KB4464566) 32-Bit-Edition
Letzte Änderung: 05.09.2019
Größe: 8,2 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4464566
Weitere Informationen:
https://support.microsoft.com/kb/4464566
Support-URL:
https://support.microsoft.com/?LN=de-de




https://www.catalog.update.microsoft...px?q=KB4475533
Updatedetails
Sicherheitsupdate für Microsoft Word 2010 (KB4475533) 32-Bit-Edition
Letzte Änderung: 08.08.2019
Größe: 13,3 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Word 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Critical
KB-Artikelnummern: 4475533
Weitere Informationen:
https://support.microsoft.com/kb/4475533
Support-URL:
https://support.microsoft.com/?LN=de-de



https://www.catalog.update.microsoft...px?q=KB4484130
Updatedetails
Sicherheitsupdate für Microsoft Excel 2010 (KB4484130) 32-Bit-Edition
Letzte Änderung: 03.10.2019
Größe: 19,8 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Excel 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4484130
Weitere Informationen:
https://support.microsoft.com/kb/4484130
Support-URL:
https://support.microsoft.com/?LN=de-de





https://www.catalog.update.microsoft...px?q=KB4475599
Updatedetails
Sicherheitsupdate für Microsoft Office 2010 (KB4475599) 32-Bit-Edition
Letzte Änderung: 05.09.2019
Größe: 2,9 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4475599
Weitere Informationen:
https://support.microsoft.com/kb/4475599
Support-URL:
https://support.microsoft.com/?LN=de-de





https://www.catalog.update.microsoft...px?q=KB4475569
Updatedetails
Sicherheitsupdate für Microsoft Office 2010 (KB4475569) 32-Bit-Edition
Letzte Änderung: 03.10.2019
Größe: 1,7 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4475569
Weitere Informationen:
https://support.microsoft.com/kb/4475569
Support-URL:
https://support.microsoft.com/?LN=de-de



Unfortunately removing all those did not cure the XP problem, even after a computer restart.

I tried a simple coding to compare a previous updates list from January 2019 to that for now, at December, 2019

Option Explicit
Sub compareJan2019ToDec2019() ' Laptop Froggy december 2019 .... The procedure entry point "EnumCalendarInfoExEx" was not found in the DLL "KERNEL32.dll" The procedure entry point "EnumCalendarInfoExEx" was not found in the DLL "KERNEL32.dll"
' Updates from last January
Dim rngSrch As Range: Set rngSrch = Worksheets("Frogy29thjan2019").Range("A1:A" & Worksheets("Frogy29thjan2019").UsedRange.Rows.Count & "")
' Update list for December after killing downloads came probably after turning off computer
Dim rngDecUpdts As Range: Set rngDecUpdts = Worksheets("Froggy30thDec2019").Range("A1:A" & Worksheets("Froggy30thDec2019").Range("A" & Rows.Count & "").End(xlUp).Row & "")
'
Dim rng As Range
For Each rng In rngDecUpdts
Dim varMtch As Variant
Let varMtch = Application.Match(rng, rngSrch, 0)
If IsError(varMtch) Then
MsgBox prompt:=rng.Value
Dim strMsg As String
Let strMsg = strMsg & rng.Value & vbCr & vbLf
Else
End If
Next rng
MsgBox prompt:=strMsg: Debug.Print strMsg ' Fron VB Editor , Hit Ctrl+g , then you can copy the list from the Immediate window which should come up after hitting Ctrl+g
End Sub
This was the result for new updates:
KB3114879
KB4475604
KB2589318
KB4462172
KB4464566
KB4475533
KB3115314
KB4484130
KB4475599
KB4475569
KB4018363
KB3114559
KB4461626



……………….Continued in next post………………………..



Ref
https://www.catalog.update.microsoft.com/Home.aspx

DocAElstein
12-31-2019, 07:11 PM
………………….from last post……………..


So looking further at these "new" updates:
KB3114879
KB4475604
KB2589318
KB4462172
KB4464566
KB4475533
KB3115314
KB4484130
KB4475599
KB4475569
KB4018363
KB3114559
KB4461626

https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462172
Update für Microsoft Office 2010 (KB4462172) 32-Bit-Edition
Letzte Änderung: 13.02.2019
Größe: 7,1 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Office 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Office 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 4462172
Weitere Informationen:
https://support.microsoft.com/kb/4462172
Support-URL:
https://support.microsoft.com/?LN=de-de



https://www.catalog.update.microsoft.com/Search.aspx?q=KB4461626
Update für Microsoft Office 2010 (KB4461626) 32-Bit-Edition
Letzte Änderung: 12.03.2019
Größe: 2,6 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Office 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Office 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 4461626
Weitere Informationen:
https://support.microsoft.com/kb/4461626
Support-URL:
https://support.microsoft.com/?LN=de-de


https://www.catalog.update.microsoft.com/Search.aspx?q=KB4018363
Update für Microsoft Access 2010 (KB4018363) 32-Bit-Edition
Letzte Änderung: 12.03.2019
Größe: 7,3 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Access 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Access 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 4018363
Weitere Informationen:
https://support.microsoft.com/kb/4018363
Support-URL:
https://support.microsoft.com/?LN=de-de





https://www.catalog.update.microsoft.com/Search.aspx?q=KB2589318
Update für Microsoft Office 2010 (KB2589318) 32-Bit-Edition
Letzte Änderung: 10.08.2015
Größe: 747 KB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Office 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Office 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 2589318
Weitere Informationen:
http://support.microsoft.com/kb/2589318
Support-URL:
http://support.microsoft.com/?LN=de-de




https://www.catalog.update.microsoft.com/Search.aspx?q=KB3115314
Update für Microsoft Visio 2010 (KB3115314) 32-Bit-Edition
Letzte Änderung: 13.02.2019
Größe: 19,8 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Visio 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Visio 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 3115314
Weitere Informationen:
https://support.microsoft.com/kb/3115314
Support-URL:
https://support.microsoft.com/?LN=de-de



https://www.catalog.update.microsoft.com/Search.aspx?q=KB3114559
Update für Microsoft Outlook 2010 (KB3114559) 32-Bit-Edition
Letzte Änderung: 09.04.2019
Größe: 355 KB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Outlook 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Outlook 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 3114559
Weitere Informationen:
https://support.microsoft.com/kb/3114559
Support-URL:
https://support.microsoft.com/?LN=de-de

So we have 6 "new" updates. But these appear on safe list

DocAElstein
12-31-2019, 09:37 PM
Strangely ….
KB4461526 has appeared. So I De installed it
KB4461576 has appeared. So I De installed it
KB4461625 came back . So I De installed it again
KB4461625 came back once again . So I De installed it again
KB4464524 has appeared. So I De installed it.
KB4462230 has appeared. So I De installed it
KB4462223 has appeared. So I De installed it


After de installing KB4462223, Office started working



https://www.catalog.update.microsoft.com/Search.aspx?q=KB4461526
Sicherheitsupdate für Microsoft Word 2010 (KB4461526) 32-Bit-Edition
Letzte Änderung: 08.11.2018
Größe: 12,9 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Word 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4461526
Weitere Informationen:
https://support.microsoft.com/kb/4461526
Support-URL:
https://support.microsoft.com/?LN=de-de



https://www.catalog.update.microsoft.com/Search.aspx?q=KB4461576
Sicherheitsupdate für Microsoft Outlook 2010 (KB4461576) 32-Bit-Edition
Letzte Änderung: 07.12.2018
Größe: 79,8 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Outlook 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4461576
Weitere Informationen:
https://support.microsoft.com/kb/4461576
Support-URL:
https://support.microsoft.com/?LN=de-de





https://www.catalog.update.microsoft.com/Search.aspx?q=%20KB4464524%20
Update für Microsoft Outlook 2010 (KB4464524) 32-Bit-Edition
Letzte Änderung: 15.05.2019
Größe: 79,8 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Outlook 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Outlook 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 4464524
Weitere Informationen:
https://support.microsoft.com/kb/4464524
Support-URL:
https://support.microsoft.com/?LN=de-de




https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462230
Sicherheitsupdate für Microsoft Excel 2010 (KB4462230) 32-Bit-Edition
Letzte Änderung: 04.04.2019
Größe: 19,8 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Excel 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4462230
Weitere Informationen:
https://support.microsoft.com/kb/4462230
Support-URL:
https://support.microsoft.com/?LN=de-de







https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462223
Sicherheitsupdate für Microsoft Office 2010 (KB4462223) 32-Bit-Edition
Letzte Änderung: 04.04.2019
Größe: 8,0 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4462223
Weitere Informationen:
https://support.microsoft.com/kb/4462223
Support-URL:
https://support.microsoft.com/?LN=de-de







At this point, I decide to go backwards, reinstalling those de installed updates in order to pin down the latest “bad” or “bads”


This is the list I have to try out on a re install
I will do it in backward order


KB3114879
KB4475604
KB2589318
KB4462172
KB4464566
KB4475533
KB3115314
KB4484130
KB4475599
KB4475569
KB4018363
KB3114559
KB4461626
KB4462187
KB4461579
KB4462177
KB4464567
KB4461521
KB4461526
KB4461576
KB4461625
KB4464524.
KB4462230
KB4462223

DocAElstein
01-01-2020, 12:51 AM
Re installing in XP
Using Microsoft Update Catalog : https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462223
To install, type in the required update in the search box top right. Remember to include KB at the front Download KB from MicrosoftUpdateCatalog.JPG : https://imgur.com/AfSAtlC
Another window appears and you have one or more files to click on to download, https://imgur.com/bIWg243
After downloading you may need to save and / or open / unzip one or more files or do a double click on files to set off the installation or installations. The exact process to get the installation to start will vary depending on your exact system and settings


KB4462223 This breaks Office 2010 after re install , and note also that KB4461626 and KB4461623 and KB4461577 and KB4227170 appeared fir the first time ever!!!
So I de installed KB4462223 again.
All was then OK.

KB4462230
All is still OK after re instal.

KB4464524 ( 14.05.2019 )
This is a large amount of files to download, I have not got around to installing all of them yet.

KB4461625 ( 03.01.2019 )
This is a large amount of files to download, I have not got around to installing all of them yet

KB4461576 ( 06.12.2018 )
This is a large amount of files to download, I have not got around to installing all of them yet

KB4461526
All is still OK after re install

KB4461521
All is still OK after re install

KB4464567
All is still OK after re install

KB4462177
All is still OK after re install

KB4461579
All is still OK after re install

KB4462187
All is still OK after re install

KB4461626
All is still OK after re install

KB3114559
All is still OK after re install

KB4018363
All is still OK after re install

KB4475569
All is still OK after re install

KB4475599
All is still OK after re install

KB4484130
All is still OK after re install

KB3115314
All is still OK after re install

KB4475533
All is still OK after re install

KB4464566
This causes the XP problem
After de installing it the problem goes away.

KB4462172
All is still OK after re install

KB2589318
All is still OK after re install

KB4475604 ( 08.10.2019 )
This is a large amount of files to download, I have not got around to installing all of them yet

KB3114879
All is still OK after re install

So it appears that the two new "bads" are
KB4464566
KB4462223
And here were the previously known
KB4461522 ( no longer available )
KB4461614 ( available , but not been offered for some time )
KB4462157 ( available , but not been offered for some time. ( Originally this was introduced to solve the problem. It never did. Quite the opposite: If you have the problem, then installing this update has no effect; but if you do not have the problem , and you instal this update, it causes the problem, just as all the other "killers do !!. ) )
KB4462174 ( available, and until recently, was still offered )
KB4462223 : The latest, available, and being currently offered
http://www.eileenslounge.com/viewtopic.php?f=21&t=31405&p=249846#p249846
We see infact that the „hidden" KB4462223 is in fact, an already known „bad"



https://www.catalog.update.microsoft.com/Search.aspx?q=KB4464566
Sicherheitsupdate für Microsoft Office 2010 (KB4464566) 32-Bit-Edition
Letzte Änderung: 05.09.2019
Größe: 8,2 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4464566
Weitere Informationen:
https://support.microsoft.com/kb/4464566
Support-URL:
https://support.microsoft.com/?LN=de-de



https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462223
Sicherheitsupdate für Microsoft Office 2010 (KB4462223) 32-Bit-Edition
Letzte Änderung: 04.04.2019
Größe: 8,0 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4462223
Weitere Informationen:
https://support.microsoft.com/kb/4462223
Support-URL:
https://support.microsoft.com/?LN=de-de



KB4461522 No longer available


https://www.catalog.update.microsoft.com/Search.aspx?q=KB4461614
Sicherheitsupdate für Microsoft Office 2010 (KB4461614) 32-Bit-Edition
Letzte Änderung: 12.02.2019
Größe: 8,2 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4461614
Weitere Informationen:
https://support.microsoft.com/kb/4461614
Support-URL:
https://support.microsoft.com/?LN=de-de




https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462157
Update für Microsoft Office 2010 (KB4462157) 32-Bit-Edition
Letzte Änderung: 22.01.2019
Größe: 8,2 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft hat ein Update für Microsoft Office 2010 32-Bit-Edition veröffentlicht. Dieses Update stellt neueste Fixes für Microsoft Office 2010 32-Bit-Edition bereit. Darüber hinaus umfasst das Update Verbesserungen von Stabilität und Leistung.
Architektur: k.A.
Klassifikation: Wichtige Updates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Unspecified
KB-Artikelnummern: 4462157
Weitere Informationen:
https://support.microsoft.com/kb/4462157
Support-URL:
https://support.microsoft.com/?LN=de-de





https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462174
Sicherheitsupdate für Microsoft Office 2010 (KB4462174) 32-Bit-Edition
Letzte Änderung: 07.02.2019
Größe: 8,0 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4462174
Weitere Informationen:
https://support.microsoft.com/kb/4462174
Support-URL:
https://support.microsoft.com/?LN=de-de




https://www.catalog.update.microsoft.com/Search.aspx?q=KB4462223
Updatedetails
Sicherheitsupdate für Microsoft Office 2010 (KB4462223) 32-Bit-Edition
Letzte Änderung: 04.04.2019
Größe: 8,0 MB
Details:
Übersicht Sprachauswahl Paketdetails Installationsressourcen
Beschreibung: Microsoft Office 2010 32-Bit-Edition enthält ein Sicherheitsrisiko, das die Ausführung von willkürlichem Code ermöglicht, wenn eine in böswilliger Absicht veränderte Datei geöffnet wird. Dieses Sicherheitsrisiko wird mit diesem Update behoben.
Architektur: k.A.
Klassifikation: Sicherheitsupdates
Unterstützte Produkte: Office 2010
Unterstützte Sprachen: all
MSRC-Nummer: k.A.
MSRC-Sicherheit: Important
KB-Artikelnummern: 4462223
Weitere Informationen:
https://support.microsoft.com/kb/4462223
Support-URL:
https://support.microsoft.com/?LN=de-de
Schließen

DocAElstein
01-01-2020, 01:47 AM
Test draft copy of forum answers associated with lates XP updates issues

http://www.eileenslounge.com/viewtopic.php?f=21&t=31405&p=249846#p249846
https://social.technet.microsoft.com/Forums/office/en-US/b8ba02ac-84a0-4a59-9371-159ac441b3bb/office-2010-updates-break-xp-procedure-entry-point-getdateformatex-could-not-be-located-in-the?forum=officeitproprevious
https://tinyurl.com/t73r3pg
https://social.technet.microsoft.com/Forums/en-US/badcaf77-9d90-477e-ad9d-c00e0d009327/the-procedure-entry-point-enumcalendarinfoexex-could-not-be-located-int-he-dynamic-link-library?forum=outlook
( ( Locked Threads:
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-mso_winother-mso_2010/ms-2010-apps-disabled-on-xp-os/dbef96a0-f858-46af-b05c-54dce16500c3?messageId=d954204b-33fe-4034-9da6-ea15c0dfbb7c&lc=1031&page=6
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_winother-mso_2010/microsoft-office-2010-on-an-xp-os/0cf7643f-1fa0-4ac5-98d1-bcda9dd9461f?messageId=e889ff6d-0a3e-41f5-baf7-4c6f3fb63739&page=4
https://answers.microsoft.com/en-us/msoffice/forum/all/ms-2010-apps-disabled-on-xp-os/dbef96a0-f858-46af-b05c-54dce16500c3?page=1
https://answers.microsoft.com/en-us/msoffice/forum/all/eeror-the-procedure-entry-point/cc792779-ac98-4211-a0b2-7df17e82fb3d )
)

I just finished unwrapping my Xmas present from Microsoft. It took me a couple of days. Despite having automatic updates disabled, occasionally a massive amount of updates still come down unexpectedly. It does not happen very often. I think theoretically it should never happen. But it does.

So one of my XP machines got the present.
I do have an extensive library of known "good and bad" Updates, and coding to sort through and compare them etc.. That usually helps identify the culprits. This time it only saw the old favourites that Microsoft like to send to cripple Active X controls, but never the less my XP was crippled by the issues discussed in this Thread.

I did identify some new updates that I had not seen before, but de installing them did not solve the problem , at least initially. After a lot of painstaking manual de installing and re installing updates I sorted the problem out…

It was very strange this time. By removing recent updates, I noticed that other updates suddenly appeared in the update this. They were not visible before. After removing some of those , the XP problem was solved. Furthermore I could re install most of the updated which I had originbally removed and still the XP problem does not return

Just to explain that again: In order to find the killer updates, you first have to de install some non offending updates. Only then do the killer updates show so that you can de install them. (A few other harmless updates may also suddenly appear). Then you can put the others back, if you like.

So finally below is the current list, with the recent ones at the bottom

If you don't find those,
or
you find some, de install them,
and still have the problem,
then try de installing a few other recent updates and then look at your update list again . If you then see any of the bad updates , then de install them. If that cures the problem then you may be able to re install some of the others you de installed without getting the problem.

In actual fact in my recent case, following the procedure that I have described, I now have all the updates that were showing after the unwanted Xmas present, and a few more, but I no longer have the problem, because I have de installed some of the bad updates, which were initially not showing after the unwanted present. Crazy situation!

Current Killer List
KB4461522 ( no longer available )
KB4461614 ( available , but not been offered for some time )
KB4462157 ( available , but not been offered for some time. ( Originally this was introduced to solve the problem. It never did. Quite the opposite: If you have the problem, then installing this update has no effect; but if you do not have the problem , and you instal this update, it causes the problem, just as all the other "killers do !!. ) )
KB4462174 ( available, and until recently, was still offered )
KB4462223
KB4464566 Probably the most recent killer
The last two may be hidden , and you may need to go through the steps I described to find them. Unfortunately I still have not figured out how to automate messing around with Office updates in XP ( I can do it with most everything else ). So you will need a few days to unwrap your present if you get one…




(P.s. Microsoft have locked some Threads on this, making it difficult to update people on the problem. But a few new Threads have also been started)

Ref:
https://social.technet.microsoft.com/Forums/office/en-US/b8ba02ac-84a0-4a59-9371-159ac441b3bb/office-2010-updates-break-xp-procedure-entry-point-getdateformatex-could-not-be-located-in-the?forum=officeitproprevious
https://tinyurl.com/t73r3pg
https://social.technet.microsoft.com/Forums/en-US/badcaf77-9d90-477e-ad9d-c00e0d009327/the-procedure-entry-point-enumcalendarinfoexex-could-not-be-located-int-he-dynamic-link-library?forum=outlook
Locked Threads:
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-mso_winother-mso_2010/ms-2010-apps-disabled-on-xp-os/dbef96a0-f858-46af-b05c-54dce16500c3?messageId=d954204b-33fe-4034-9da6-ea15c0dfbb7c&lc=1031&page=6
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_winother-mso_2010/microsoft-office-2010-on-an-xp-os/0cf7643f-1fa0-4ac5-98d1-bcda9dd9461f?messageId=e889ff6d-0a3e-41f5-baf7-4c6f3fb63739&page=4
https://answers.microsoft.com/en-us/msoffice/forum/all/ms-2010-apps-disabled-on-xp-os/dbef96a0-f858-46af-b05c-54dce16500c3?page=1
https://answers.microsoft.com/en-us/msoffice/forum/all/eeror-the-procedure-entry-point/cc792779-ac98-4211-a0b2-7df17e82fb3d

DocAElstein
01-01-2020, 07:40 PM
In support of these Thread posts

http://www.excelfox.com/forum/showthread.php/2302-quot-What%E2%80%99s-in-a-String-quot-VBA-break-down-Loop-through-character-contents-of-a-string?p=11015&viewfull=1#post11015
http://www.eileenslounge.com/viewtopic.php?f=30&t=33860&p=262344#p262344





Sub TestWtchaGot_Unic_NotMuchIfYaChoppedItOff()
Call WtchaGot_Unic_NotMuchIfYaChoppedItOff("Laptop" & ChrW(8207) & ChrW(5))
End Sub
Sub WtchaGot_Unic_NotMuchIfYaChoppedItOff(ByVal strIn As String) '
Rem 1 ' Output "sheet hardcopies"
'1a) Worksheets 'Make a Temporary Sheet, if not already there, in Current Active Workbook, for a simple list of all characters
If Not Evaluate("=ISREF(" & "'" & "WotchaGotInString" & "'!Z78)") Then ' ( the ' are not important here, but iin general allow for a space in the worksheet name like "Wotcha Got In String"
Dim Wb As Workbook ' ' ' Dim: ' Preparing a "Pointer" to an Initial "Blue Print" in Memory of the Object ( Pigeon Hole with a bit of paper or code lines on that can be filled in to refer to a specific Objec of this type ) . This also us to get easily at the Methods and Properties throught the applying of a period ( .Dot) ( intellisense ) '
Set Wb = ActiveWorkbook ' ' Set now (to Active Workbook - one being "looked at"), so that we carefull allways referrence this so as not to go astray through Excel Guessing inplicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 '
Wb.Worksheets.Add After:=Wb.Worksheets.Item(Worksheets.Count) 'A sheeet is added and will be Active
Dim Ws As Worksheet '
Set Ws = ActiveSheet 'Rather than rely on always going to the active sheet, we referr to it Explicitly so that we carefull allways referrence this so as not to go astray through Excel Guessing implicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 ' Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191
Ws.Activate: Ws.Cells(1, 1).Activate ' ws.Activate and activating a cell sometimes seemed to overcome a strange error
Let Ws.Name = "WotchaGotInString"
Else ' The worksheet is already there , so I just need to set my variable to point to it
Set Ws = ThisWorkbook.Worksheets("WotchaGotInString")
End If
'1b) Array
Dim myLenf As Long: Let myLenf = Len(strIn) ' ' Long is very simple to handle, - final memory "size" type is known (123.456 and 000.001 have same "size" computer memory ) , and so a Address suggestion can be given for the next line when the variable is filled in. '( Long is a Big whole Number limit (-2,147,483,648 to 2,147,483,647) If you need some sort of validation the value should only be within the range of a Byte/Integer otherwise there's no point using anything but Long.--upon/after 32-bit, Integers (Short) need converted internally anyways, so a Long is actually faster. ) https://www.mrexcel.com/forum/excel-questions/803662-byte-backward-loop-4.html
Dim arrWotchaGot() As String: ReDim arrWotchaGot(1 To myLenf + 1, 1 To 2) ' +1 for header Array for the output 2 column list. The type is known and the size, but I must use this ReDim method simply because the dim statement Dim( , ) is complie time thing and will only take actual numbers
Let arrWotchaGot(1, 1) = Format(Now, "DD MMM YYYY") & vbLf & "Lenf is " & myLenf: Let arrWotchaGot(1, 2) = Left(strIn, 40)
Rem 2 String anylaysis
'Dim myLenf As Long: Let myLenf = Len(strIn)
Dim Cnt As Long
For Cnt = 1 To myLenf ' ===Main Loop============================================== ==========================
' Character analysis: Get at each character
Dim Caracter As Variant ' String is probably OK.
Let Caracter = Mid(strIn, Cnt, 1) ' ' the character in strIn at position from the left of length 1
'2a) The character added to a single WotchaGot long character string to look at and possibly use in coding
Dim WotchaGot As String ' This will be used to make a string that I can easilly see and also is in a form that I can copy and paste in a code line required to build the full string of the complete character string
'2a)(i) Most common characters and numbers to be displayed as "seen normally" ' -------2a)(i)--
If Caracter Like "[A-Z]" Or Caracter Like "[0-9]" Or Caracter Like "[a-z]" Then ' Check for normal characters
'SirNirios
If Not Cnt = 1 Then ' I am only intersted in next line comparing the character before, and if i did not do this the next line would error if first character was a "normal" character
If Not Cnt = myLenf And (Mid(strIn, Cnt - 1, 1) Like "[A-Z]" Or Mid(strIn, Cnt - 1, 1) Like "[0-9]" Or Mid(strIn, Cnt - 1, 1) Like "[a-z]") Then ' And (Mid(strIn, Cnt + 1, 1) Like "[A-Z]" Or Mid(strIn, Cnt + 1, 1) Like "[0-9]" Or Mid(strIn, Cnt + 1, 1) Like "[a-z]") Then
Let WotchaGot = WotchaGot & "|LinkTwoNormals|"
Else
End If
Else
End If
Let WotchaGot = WotchaGot & """" & Caracter & """" & " & " ' This will give the sort of output that I need to write in a code line, so for example if I have a123 , this code line will be used 4 times and give like a final string for me to copy of "a" & "1" & "2" & "3" & I would phsically need to write in code like strVar = "a" & "1" & "2" & "3" - i could of course also write = "a123" but the point of this routine is to help me pick out each individual element
Else ' Some other things that I would like to "see" normally - not "normal simple character" - or by a VBA constant, like vbCr vbLf vbTab
Select Case Caracter ' 2a)(ii)_1
Case " "
Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case "!"
Let WotchaGot = WotchaGot & """" & "!" & """" & " & "
Case "$"
Let WotchaGot = WotchaGot & """" & "$" & """" & " & "
Case "%"
Let WotchaGot = WotchaGot & """" & "%" & """" & " & "
Case "~"
Let WotchaGot = WotchaGot & """" & "~" & """" & " & "
Case "&"
Let WotchaGot = WotchaGot & """" & "&" & """" & " & "
Case "("
Let WotchaGot = WotchaGot & """" & "(" & """" & " & "
Case ")"
Let WotchaGot = WotchaGot & """" & ")" & """" & " & "
Case "/"
Let WotchaGot = WotchaGot & """" & "/" & """" & " & "
Case "\"
Let WotchaGot = WotchaGot & """" & "\" & """" & " & "
Case "="
Let WotchaGot = WotchaGot & """" & "=" & """" & " & "
Case "?"
Let WotchaGot = WotchaGot & """" & "?" & """" & " & "
Case "'"
Let WotchaGot = WotchaGot & """" & "'" & """" & " & "
Case "+"
Let WotchaGot = WotchaGot & """" & "+" & """" & " & "
Case "-"
Let WotchaGot = WotchaGot & """" & "-" & """" & " & "
Case "_"
Let WotchaGot = WotchaGot & """" & "_" & """" & " & "
Case "."
Let WotchaGot = WotchaGot & """" & "." & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' ' 2a)(ii)_2
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
' Case " "
' Let WotchaGot = WotchaGot & """" & " " & """" & " & "
Case vbCr
Let WotchaGot = WotchaGot & "vbCr & " ' I actuall would write manually in this case like vbCr &
Case vbLf
Let WotchaGot = WotchaGot & "vbLf & "
Case vbCrLf
Let WotchaGot = WotchaGot & "vbCrLf & "
Case vbNewLine
Let WotchaGot = WotchaGot & "vbNewLine & "
Case """" ' This is how to get a single " No one is quite sure how this works. My theory that, is as good as any other, is that syntaxly """" or " """ or """ " are accepted. But in that the """ bit is somewhat strange for VBA. It seems to match the first and Third " together as a valid pair but the other " in the middle of the 3 "s is also syntax OK, and does not error as """ would because of the final 4th " which it syntaxly sees as a valid pair matched simultaneously as it does some similar check on the first and Third as a concluding string pair. All is well except that the second " is captured within a accepted enclosing pair made up of the first and third " At the same time the 4th " is accepted as a final concluding " paired with the second which it is using but at the same time now isolated from.
Let WotchaGot = WotchaGot & """" & """" & """" & """" & " & " ' The reason why "" "" would not work is that at the end of the "" the next empty character signalises the end of a string pair, and only if it saw a " would it keep checking the syntax rules which then lead in the previous case to the situation described above.
Case vbTab
Let WotchaGot = WotchaGot & "vbTab & "
' 2a)(iii)
Case Else
If AscW(Caracter) < 256 Then
Let WotchaGot = WotchaGot & "Chr(" & AscW(Caracter) & ")" & " & "
Else
Let WotchaGot = WotchaGot & "ChrW(" & AscW(Caracter) & ")" & " & "
End If
'Let CaseElse = Caracter
End Select
End If ' End of the "normal simple character" or not ' -------2a)------Ended-----------
'2b) A 2 column Array for convenience of a list
Let arrWotchaGot(Cnt + 1, 1) = Cnt & " " & Caracter: Let arrWotchaGot(Cnt + 1, 2) = AscW(Caracter) ' +1 for header
Next Cnt ' ========Main Loop============================================== ===================================
'2c) Some tidying up
If WotchaGot <> "" Then
Let WotchaGot = Left(WotchaGot, Len(WotchaGot) - 3) ' take off last " & " ( 2 spaces one either side of a & )
Let WotchaGot = Replace(WotchaGot, """ & |LinkTwoNormals|""", "", 1, -1, vbBinaryCompare)
' The next bit changes like this "Lapto" & "p" to "Laptop" You might want to leave it out ti speed things up a bit
If Len(WotchaGot) > 5 And (Mid(WotchaGot, Len(WotchaGot) - 1, 1) Like "[A-Z]" Or Mid(WotchaGot, Len(WotchaGot) - 1, 1) Like "[0-9]" Or Mid(WotchaGot, Len(WotchaGot) - 1, 1) Like "[a-z]") And (Mid(WotchaGot, Len(WotchaGot) - 7, 1) Like "[A-Z]" Or Mid(WotchaGot, Len(WotchaGot) - 7, 1) Like "[0-9]" Or Mid(WotchaGot, Len(WotchaGot) - 7, 1) Like "[a-z]") And Mid(WotchaGot, Len(WotchaGot) - 6, 5) = """" & " & " & """" Then
Let WotchaGot = Left$(WotchaGot, Len(WotchaGot) - 7) & Mid(WotchaGot, Len(WotchaGot) - 1, 2) ' Changes like this "Lapto" & "p" to "Laptop"
Else
End If
Else
End If
Rem 3 Output
'3a) String
MsgBox prompt:=WotchaGot: Debug.Print WotchaGot ' Hit Ctrl+g from the VB Editor to get a copyable version of the entire string
'3b) List
Dim NxtClm As Long: Let NxtClm = 1 ' In conjunction with next If this prevents the first column beine taken as 0 for an empty worksheet
If Not Ws.Range("A1").Value = "" Then Let NxtClm = Ws.Cells.Item(1, Columns.Count).End(xlToLeft).Column + 1
Let Ws.Cells.Item(1, NxtClm).Resize(UBound(arrWotchaGot(), 1), UBound(arrWotchaGot(), 2)).Value = arrWotchaGot()
Ws.Cells.Columns.AutoFit
End Sub
'

DocAElstein
01-04-2020, 01:30 AM
Coding for this Thread post
http://www.excelfox.com/forum/showthread.php/2390-Apply-Vlookup-formula-in-all-the-available-sheets-in-a-workbook?p=11827&viewfull=1#post11827



Sub MakeFormulas4() ' http://www.excelfox.com/forum/showthread.php/2390-Apply-Vlookup-formula-in-all-the-available-sheets-in-a-workbook?p=11827&viewfull=1#post11827
Rem 1 ' Workbooks info
' 1a This months book, this workbook. It is the outout book for the current month
Dim ThisMonthsLatestBook As Workbook, LisWbName As String
Set ThisMonthsLatestBook = ThisWorkbook ' ActiveWorkbook
Let LisWbName = ThisMonthsLatestBook.Name
' If InStr(7, LisWbName, Format(Now(), "MMM"), vbTextCompare) = 0 Then MsgBox Prompt:="This workbook is not for " & Format(Now(), "MMMM"): Exit Sub
'Dim BookN As Long
' Let BookN = Mid(LisWbName, 5, InStr(5, LisWbName, "_", vbBinaryCompare) - 5)
' 1b Last months book
Dim strDteLisBk As String, DteLisBk As Date
Let strDteLisBk = Mid(LisWbName, 32, 8)
Dim LooksLikeADate As String: Let LooksLikeADate = Right(strDteLisBk, 2) & "." & Mid(strDteLisBk, 5, 2) & "." & Left(strDteLisBk, 4)
Let DteLisBk = CDate(LooksLikeADate) ' 31.12.2019 Looks like a date

Dim sourceBookName As String
' Let sourceBookName = "Book" & BookN - 1 & "_" & Format(DateAdd("m", -1, Now()), "MMM YYYY") & ".xlsm"
Let sourceBookName = "MSCI Equity Index Constituents " & Format(DateAdd("m", -1, DteLisBk), "YYYYMMDD") & ".xlsm"
Dim sourceBook As Workbook
Set sourceBook = Workbooks.Open(ThisWorkbook.Path & "\" & sourceBookName)
Rem 2 Make records worksheet Sub MakeWorkSheetIfNotThere()
'Dim Wb As Workbook ' ' ' Dim: ' Preparing a "Pointer" to an Initial "Blue Print" in Memory of the Object ( Pigeon Hole with a bit of paper or code lines on that can be filled in to refer to a specific Objec of this type ) . This also us to get easily at the Methods and Properties throught the applying of a period ( .Dot) ( intellisense ) '
' Set Wb = ActiveWorkbook ' ' Set now (to Active Workbook - one being "looked at"), so that we carefull allways referrence this so as not to go astray through Excel Guessing inplicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 '
If Not Evaluate("=ISREF(" & "'" & "Records" & "'!Z78)") Then ' ( the ' are not important here, but in general allow for a space in the worksheet name like "My Records"
ThisMonthsLatestBook.Worksheets.Add After:=ThisMonthsLatestBook.Worksheets.Item(Worksh eets.Count) 'A sheeet is added and will be Active
Dim wsRcds As Worksheet '
Set wsRcds = ThisMonthsLatestBook.Worksheets.Item(ThisMonthsLat estBook.Worksheets.Count) 'Rather than rely on always going to the active sheet, we referr to it Explicitly so that we carefull allways referrence this so as not to go astray through Excel Guessing implicitly not the one we want... Set: Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191 ' Values are filled at the memory locations and the directions there are specified in the variable "Blue Print "Pointer". In this case a Filled in Blue Print is passed. http://www.excelforum.com/excel-programming-vba-macros/1138804-help-understanding-class-instancing-cant-set-ws-new-worksheet-intellisense-offers-it-4.html#post4387191
wsRcds.Activate: wsRcds.Cells(1, 1).Activate ' ws.Activate and activating a cell sometimes seemed to overcome a strange error
Let wsRcds.Name = "Records"
Else ' The worksheet is already there , so I just need to set my variable to point to it
Set wsRcds = ThisWorkbook.Worksheets("Records")
End If
' End Sub
Rem 3 looping through worksheets
Dim C As Long, I As Long
'C = ActiveWorkbook.Worksheets.Count
'Let C = ThisWorkbook.Worksheets.Count
Let C = ThisMonthsLatestBook.Worksheets.Count - 1 ' -1 since last worksheet is records worksheet
'For I = 1 To C
'Application.ScreenUpdating = True
For I = 1 To C ' Sheet1 , Sheet2 , Sheet3 .......
'what are our worksheets? I = 1 , 2 , 3 ..........
Dim sourceSheet As Worksheet
Set sourceSheet = sourceBook.Worksheets.Item(I) ' ("Sheet1") , Sheet2 , Sheet3 ........
Dim outputSheet As Worksheet
Set outputSheet = ThisWorkbook.Worksheets.Item(I) ' ("Sheet1") , Sheet2 , Sheet3 ........

'Determine last row of source
With sourceSheet
Dim SourceLastRow As Long
SourceLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
With outputSheet
'Determine last row in col P
Dim OutputLastRow As Long
OutputLastRow = .Cells(.Rows.Count, "P").End(xlUp).Row
End With
'Apply our formula in records worksheet
With Worksheets("Records")
Let .Cells.Item(1, I).Value = sourceSheet.Name ' Header in column as worksheet name
'.Range("Q2:Q" & OutputLastRow).Formula = "=VLOOKUP($A2,'[" & sourceBook.Name & "]" & sourceSheet.Name & "'!$A$2:$P$" & SourceLastRow & ",3,0)"
.Range("" & CL(I) & "2:" & CL(I) & "" & OutputLastRow).Value = "=VLOOKUP(" & outputSheet.Name & "!$A2,'" & sourceBook.Path & "\" & "[" & sourceBook.Name & "]" & sourceSheet.Name & "'!$A$2:$P$" & SourceLastRow & ",3,0)"
' .Range("" & CL(I) & "2:" & CL(I) & "" & OutputLastRow).Value = .Range("" & CL(I) & "2:" & CL(I) & "" & OutputLastRow).Value
End With
'MsgBox ActiveWorkbook.Worksheets(I).Name
MsgBox ActiveWorkbook.Worksheets.Item(I).Name
Next I
'Next P
Rem 4
Dim cel As Range
With Worksheets("Records").UsedRange
For Each cel In .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
If IsError(cel.Value) Then
'
Else
If cel.Value < 3 Then
cel.Font.Color = vbRed
Else
cel.Font.Color = vbGreen
End If
End If
Next cel
End With

'Close the source workbook, don't save any changes
sourceBook.Close False
' Application.ScreenUpdating = True
End Sub

DocAElstein
01-07-2020, 05:50 PM
Coding in support of these Thread posts
http://www.excelfox.com/forum/showthread.php/2384-VPN-Forum-access-and-IP-addresse-Tests?p=11569&viewfull=1#post11569
http://www.excelfox.com/forum/showthread.php/2384-VPN-Forum-access-and-IP-addresse-Tests?p=11672&viewfull=1#post11672






Sub ipconfigall_routeprint(Optional ByVal Msg As String) '
Rem 1 ipconfig /all
Shell "cmd.exe /c ""ipconfig /all > """ & ThisWorkbook.Path & "\ipconfig__all.txt"""""
' Get the entire text file as a string
Dim FileNum As Long: Let FileNum = FreeFile(1) '
Dim PathAndFileName As String, strIPcon As String
Let PathAndFileName = ThisWorkbook.Path & "\ipconfig__all.txt"
' Let PathAndFileName = ThisWorkbook.Path & "\test2B.txt" ' Al
Open PathAndFileName For Binary As #FileNum 'Open Route to data. Binary is a fundemental type data input...
strIPcon = VBA.Strings.Space$(LOF(FileNum)) '....and wot recives it hs to be a string of exactly the right length
Get #FileNum, , strIPcon
Close #FileNum
' Tidy the string
Let strIPcon = Replace(strIPcon, vbCr & vbCr, vbCr, 1, -1, vbBinaryCompare)
Let strIPcon = Replace(strIPcon, vbTab, " ", 1, -1, vbBinaryCompare)
' add any extra info to string
Dim PublicIP As String: Call PubicIP(PublicIP)
Let strIPcon = "ipconfig /all route print" & Msg & vbCr & vbLf & ComputerName & vbCr & vbLf & GetIpAddrTable & vbCr & vbLf & PublicIP & vbCr & vbLf & vbCr & vbLf & """" & Format(Now, "DD MMM YYYY") & " " & vbLf & " " & Format(Now, "hh mm ss") & """" & vbCr & vbLf & vbCr & vbLf & vbCr & vbLf & vbCr & vbLf & vbCr & vbLf & vbCr & vbLf & strIPcon ' vbLf is recognised as a new line within an Excel"
' String content check
' Call WtchaGot(strIPcon)
' put the text in the clipboard
Dim objDataObject As Object: Set objDataObject = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObject.SetText strIPcon: objDataObject.PutInClipboard

' Excel Worksheet
Dim Ws As Worksheet: Set Ws = ActiveSheet
Dim Clm As Range, NxtClm As Long
Set Clm = Ws.Cells.Find(What:="*", After:=Ws.Range("A1"), LookAt:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
If Clm Is Nothing Then
Let NxtClm = 2
Else
Let NxtClm = Clm.Column + 1
End If
' Put in next free column in Active sheet
Ws.Paste Destination:=Ws.Cells.Item(1, NxtClm)
' Ws.Columns.AutoFit: Ws.Rows.AutoFit

Rem 2 route print
Shell "cmd.exe /c ""route print > """ & ThisWorkbook.Path & "\route_print.txt"""""
' Get the entire text file as a string
Let FileNum = FreeFile(1) ' ' The "highway/ street/ link" to be built to transport the text will be given a number. It must be unique. So we use for convenience, the Freefile function: it returns an integer that represents the next file number that the Open statement can use. The optional argument for the range number is a variant that is used to specify a range from which the next free file number is returned. Enter a value of data type 0 (default) to return a file number in the range 1 - 255 inclusive. Enter 1 to return a file number in the range 256 - 511. https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/freefile-function . Note also : Use file numbers in the range 1-255, inclusive, for files not accessible to other applications. Use file numbers in the range 256-511 for files accessible from other applications
Dim strrouteprint As String
Let PathAndFileName = ThisWorkbook.Path & "\route_print.txt"
' Let PathAndFileName = ThisWorkbook.Path & "\test2B.txt" ' Al
Open PathAndFileName For Binary As #FileNum 'Open Route to data. Binary is a fundemental type data input...
strrouteprint = VBA.Strings.Space$(LOF(FileNum)) '....and wot recives it hs to be a string of exactly the right length
Get #FileNum, , strrouteprint
Close #FileNum
' Tidy the string
Let strrouteprint = Replace(strrouteprint, vbCr & vbCr, vbCr, 1, -1, vbBinaryCompare)
Let strrouteprint = Replace(strrouteprint, vbTab, " ", 1, -1, vbBinaryCompare)
' put the text in the clipboard
objDataObject.SetText strrouteprint: objDataObject.PutInClipboard
' Excel Worksheet
Dim Lr As Long: Let Lr = Ws.Cells(Ws.Rows.Count, NxtClm).End(xlUp).Row
' Put in next free column in Active sheet
Ws.Paste Destination:=Ws.Cells.Item(Lr + 30, NxtClm)
Ws.Columns.AutoFit: Ws.Rows.AutoFit
ActiveWindow.Panes(2).Activate
Ws.Cells.Item(1, NxtClm).Select
End Sub
'

DocAElstein
01-10-2020, 12:31 AM
In support of this Thread
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias

Summary worksheet, before

_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1VoucherDateLink


2Go To Sheet


3Go To Sheet


4
Worksheet: Summary

DocAElstein
01-10-2020, 12:31 AM
In support of this Thread
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias

_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )

01.01.2020_99909900 - A01.01.2020_88888888 - F01.01.2020_88888886 - D01.01.2020_88888887 - E02.01.2020_99909900 - A03.01.2020_99909900 - A04.01.2020_88888888 - F05.01.2020_88888888 - F06.01.2020_88888888 - F07.01.2020_88888888 - F08.01.2020_88888888 - F09.01.2020_88888888 - F10.01.2020_99909900 - A11.01.2020_99909900 - A12.01.2020_99909900 - A13.01.2020_99909900 - A14.01.2020_99909900 - A15.01.2020_99909900 - A
Worksheet: arrUnicDtsSrc

DocAElstein
01-10-2020, 12:31 AM
In support of this Thread
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias


_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )

01.01.20201Item AABC1231200020001E+08A12000200001.01.2020_99909900 - A

01.01.20204Item DLLL00011311311E+08A113113101.01.2020_99909900 - A

01.01.20205Item ELLL000555027501E+08A5550275001.01.2020_99909900 - A

01.01.20201Item AABC1231200020001E+08A12000200001.01.2020_99909900 - A

01.01.20204Item DLLL00011311311E+08A113113101.01.2020_99909900 - A

01.01.20205Item ELLL000555027501E+08A5550275001.01.2020_99909900 - A

01.01.20201Item AABC1231200020001E+08A12000200001.01.2020_99909900 - A

01.01.20204Item DLLL00011311311E+08A113113101.01.2020_99909900 - A

01.01.20205Item ELLL000555027501E+08A5550275001.01.2020_99909900 - A

01.01.20201Item AABC1231200020001E+08A12000200001.01.2020_99909900 - A

01.01.20204Item DLLL00011311311E+08A113113101.01.2020_99909900 - A

01.01.20205Item ELLL000555027501E+08A5550275001.01.2020_99909900 - A

01.01.20201Item AABC1231200020001E+08A12000200001.01.2020_99909900 - A

01.01.20204Item BLLL00011311318.9E+07F113113101.01.2020_88888888 - F

01.01.20205Item CLLL000555027508.9E+07F5550275001.01.2020_88888888 - F

01.01.20201Item DABC1231200020008.9E+07D12000200001.01.2020_888888 86 - D

01.01.20204Item DLLL00011311318.9E+07E113113101.01.2020_88888887 - E

01.01.20205Item ELLL000555027508.9E+07F5550275001.01.2020_88888888 - F

01.01.20201Item AABC1231200020001E+08A12000200001.01.2020_99909900 - A

01.01.20204Item DLLL00011311311E+08A113113101.01.2020_99909900 - A

01.01.20205Item ELLL000555027501E+08A5550275001.01.2020_99909900 - A

01.01.20201Item AABC1231200020001E+08A12000200001.01.2020_99909900 - A

01.01.20204Item DLLL00011311311E+08A113113101.01.2020_99909900 - A

01.01.20205Item ELLL000555027501E+08A5550275001.01.2020_99909900 - A

02.01.20202Item BABC1221350035001E+08A13500350002.01.2020_99909900 - A

03.01.20203Item CLLL000410.441.61E+08A410.441.603.01.2020_99909900 - A

04.01.20204Item DLLL00111311318.9E+07F113113104.01.2020_88888888 - F

05.01.20205Item EABC999855044008.9E+07F8550440005.01.2020_88888888 - F

06.01.20206Item FABC9991250025008.9E+07F12500250006.01.2020_888888 88 - F

07.01.20207Item GLLL0011250025008.9E+07F12500250007.01.2020_888888 88 - F

08.01.20208Item HLLL0011225022508.9E+07F12250225008.01.2020_888888 88 - F

09.01.20204Item DABC1231225022508.9E+07F12250225009.01.2020_888888 88 - F

10.01.20205Item EABC1221225022501E+08A12250225010.01.2020_99909900 - A

11.01.202011Item KABC12216006001E+08A160060011.01.2020_99909900 - A

12.01.202012Item LABC1231499249921E+08A14992499212.01.2020_99909900 - A

13.01.202013Item MABC122110101E+08A1101013.01.2020_99909900 - A

14.01.20206Item FLLL0001273127311E+08A12731273114.01.2020_99909900 - A

15.01.20207Item GABC122185000850001E+08A1850008500015.01.2020_9990 9900 - A

01.01.20205Item ELLL000555027501E+08A5550275001.01.2020_99909900 - A

02.01.20202Item BABC1221350035001E+08A13500350002.01.2020_99909900 - A

03.01.20203Item CLLL000410.441.61E+08A410.441.603.01.2020_99909900 - A

04.01.20204Item DLLL00111311318.9E+07F113113104.01.2020_88888888 - F

05.01.20205Item EABC999855044008.9E+07F8550440005.01.2020_88888888 - F

06.01.20206Item FABC9991250025008.9E+07F12500250006.01.2020_888888 88 - F

07.01.20207Item GLLL0011250025008.9E+07F12500250007.01.2020_888888 88 - F

08.01.20208Item HLLL0011225022508.9E+07F12250225008.01.2020_888888 88 - F

09.01.20204Item DABC1231225022508.9E+07F12250225009.01.2020_888888 88 - F

10.01.20205Item EABC1221225022501E+08A12250225010.01.2020_99909900 - A

11.01.202011Item KABC12216006001E+08A160060011.01.2020_99909900 - A

12.01.202012Item LABC1231499249921E+08A14992499212.01.2020_99909900 - A

13.01.202013Item MABC122110101E+08A1101013.01.2020_99909900 - A
Worksheet: arrAllDts

DocAElstein
01-10-2020, 12:31 AM
In support of this Thread
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias






_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )

4567891011121314151622232425262742
Worksheet: arrRws









_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )


4


5


6


7


8


9


10


11


12


13


14


15


16


22


23


24


25


26


27


42
Worksheet: arrRwsT

DocAElstein
01-10-2020, 12:42 AM
In support of this Thread
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias



Option Explicit
Sub DoItForADay()
Rem 1 Worksheets info
Dim WsTp As Worksheet, WsDta As Worksheet, WsSmry As Worksheet
Set WsTp = ThisWorkbook.Worksheets("Template"): Set WsDta = ThisWorkbook.Worksheets("Datadump"): Set WsSmry = ThisWorkbook.Worksheets("Summary")
Rem 2 The days and source list
' 2a) Put all info in an array
Dim LrDta As Long: Let LrDta = WsDta.Range("A" & WsDta.Rows.Count & "").End(xlUp).Row
Dim arrAllDts() As Variant ' In the naxt line, the .Value Property ( method ) , is used to return in one go all Values in the range. They are returned as a field, ( array ) of values in held in Variant type elements. So we must use Variant for the Dim ing of the type of our Elements, or else the next code line will error , with a Mismatch error
Let arrAllDts = WsDta.Range("A4:M" & LrDta & "").Value ' I am adding column M for my own amusement
' 2b)

' 2c) make an array with all unique identifier for each voucher
Dim Cnt As Long
For Cnt = 1 To UBound(arrAllDts(), 1) ' Looping effectively from forth row until last row in Datadump
Dim Idt As String
Let Idt = arrAllDts(Cnt, 1) & "_" & arrAllDts(Cnt, 8) & " - " & arrAllDts(Cnt, 9) ' I am adding a "_" to in between the date and source info : Later I can split the unique identifiers string by this "_" in order to get the date and souce info
Let arrAllDts(Cnt, 13) = Idt
Dim strDtsSrc As String
If InStr(1, strDtsSrc, Idt, vbBinaryCompare) = 0 Then
Let strDtsSrc = strDtsSrc & Idt & "###"
Else
' case we already have the date in our string, strDts
End If
Next Cnt
Let strDtsSrc = Left(strDtsSrc, (Len(strDtsSrc) - 3)) ' take off the last space "###" which we do not need
'Debug.Print strDtsSrc
' 2d)
Dim arrUnicDtsSrc() As String
Let arrUnicDtsSrc() = Split(strDtsSrc, "###", -1)
Let Worksheets("arrUnicDtsSrc").Range("A1").Resize(1, (UBound(arrUnicDtsSrc()) + 1)).Value = arrUnicDtsSrc() ' arrUnicDtsSrc().jpg --- https://imgur.com/QX1bJMB
Worksheets("arrUnicDtsSrc").Columns.AutoFit
Let Worksheets("arrAllDts").Range("A4:M" & LrDta & "").Value = arrAllDts()
' The next code line can be removed to get all the 19 worksheets
ReDim arrUnicDtsSrc(0 To 0): Let arrUnicDtsSrc(0) = "01.01.2020_99909900 - A" ' ***** I am limiting it to the first unique identifier, ( 01.01.2020_99909900 - A ) just for demo purposes. If you remove this line, then you will see that all dates and sources will be considered
Rem 3 ' === Main Outer loop ================================================== ==========
Dim Stear As Variant ' For Each unique identifier . In VBA,
For Each Stear In arrUnicDtsSrc() ' Doing stuff For Each unique identifier
'3a) work out how many rows and which row indicies with the current unique identifier
Dim DteSrcRwCnt As Long
For Cnt = 1 To UBound(arrAllDts(), 1) ' ----------------------Going through all data rows
If arrAllDts(Cnt, 13) = CStr(Stear) Then ' I am looking for rows in the main datadump that have the current unique identifier
'3a)(i) counting rows
' Debug.Print Cnt + 3 & " " & arrAllDts(Cnt, 13)
Let DteSrcRwCnt = DteSrcRwCnt + 1 ' counting the rows for the current unique identifier
'3a)(ii) get the (row) indicies for the current unique identifier. Later i need the row number of all the rows corresponding to the current unique identifier
Dim strRws As String
Let strRws = strRws & Cnt + 3 & " " ' I later wont the actual row in the datadump worksheet, so that is 3 higher than the "row" number in arrAllDts() because I captured just the range from the 4th row -- "A4:M........
Else
End If
Next Cnt ' ----------------------Going through all data rows
Let strRws = Left(strRws, (Len(strRws) - 1)) ' Take of last " " which I do not need
Dim arrRws() As String ' The VBA string function returns field of string type elements. So I must Dim my array elements appropriately
Let arrRws() = Split(strRws, " ", -1, vbBinaryCompare) ' This gives us an array which is the row numbers in the Datadump for this unique identifier
Let ThisWorkbook.Worksheets("arrRws").Range("A1").Resize(1, (UBound(arrRws()) + 1)).Value = arrRws() ' arrRws().JPG - https://imgur.com/HDgpyQq -
ThisWorkbook.Worksheets("arrRws").Columns.AutoFit
'3b) In the "Magic Code line" below we need a "vertical" array https://www.excelforum.com/excel-new-users-basics/1099995-application-index-with-look-up-rows-and-columns-arguments-as-vba-arrays.html#post4571172
Dim arrRwsT() As Long
ReDim arrRwsT(1 To UBound(arrRws()) + 1, 1 To 1) ' a "Vertical" 1 column array
For Cnt = 1 To UBound(arrRws()) + 1
Let arrRwsT(Cnt, 1) = arrRws(Cnt - 1)
Next Cnt
Let ThisWorkbook.Worksheets("arrRwsT").Range("A1:A" & UBound(arrRws()) + 1 & "").Value = arrRwsT() ' - arrRwsT().JPG - https://imgur.com/syf0PaZ
Rem 4 Make Vouchers for current unique identifier, Stear
' 4a)
Dim arrVouch() As Variant ' https://www.excelforum.com/excel-new-users-basics/1099995-application-index-with-look-up-rows-and-columns-arguments-as-vba-arrays.html#post4571172
Let arrVouch() = WsTp.Range("A1:K24").Value
' 4b) An array just containing the rows for the current Idt
Dim Clms() As Variant: Let Clms() = Evaluate("=Column(A:N)") ' {1, 2, 3, 4......14} - Clms().jpg - https://imgur.com/xHlUeH9
Dim arrDtsSrc() As Variant ' For "Magic Code line" https://www.excelforum.com/excel-new-users-basics/1099995-application-index-with-look-up-rows-and-columns-arguments-as-vba-arrays.html#post4571172
Let arrDtsSrc() = Application.Index(WsDta.Cells, arrRwsT(), Clms()) ' - --"Magic Code line" - arrDtsSrc().JPG : https://imgur.com/0c8SgIn
Let ThisWorkbook.Worksheets("arrDtsSrc").Range("A1").Resize(UBound(arrDtsSrc(), 1), UBound(arrDtsSrc(), 2)).Value = arrDtsSrc() ' - arrRwsT().JPG - https://imgur.com/syf0PaZ
Dim RwCnt As Long: Let RwCnt = 1: Let Cnt = 1
' 4c)
Do While RwCnt < DteSrcRwCnt + 1 ' ............................................
Do While Cnt < 11 ' _________________________________|
' Fill in values in Voucher Array
Let arrVouch(Cnt + 9, 1) = "'" & arrDtsSrc(RwCnt, 2) ' The extra "'" is one way to keep the leading 0s
Let arrVouch(Cnt + 9, 4) = arrDtsSrc(RwCnt, 3) ' Detail ( Item )
Let arrVouch(Cnt + 9, 7) = arrDtsSrc(RwCnt, 4) ' Unit Code
Let arrVouch(Cnt + 9, 9) = arrDtsSrc(RwCnt, 11) ' Value
Let Cnt = Cnt + 1
Let RwCnt = RwCnt + 1
Loop ' While Cnt < 11 ' ______________________________|
Let arrVouch(6, 3) = Split(Stear, "_", 2, vbBinaryCompare)(1) ' The second array element (1) is source code & source name ( The first array element (0) is the date )
Let arrVouch(4, 10) = Split(Stear, "_", 2, vbBinaryCompare)(0) ' The first array element (0) is the date
Let Cnt = 1 ' back to first row for a template
'4d) Information to the summary sheet.
Dim NxtVch As Long: Let NxtVch = WsSmry.Range("A" & WsSmry.Rows.Count & "").End(xlUp).Row
Let WsSmry.Range("A" & NxtVch + 1 & "").Value = "V" & Format(NxtVch, "0000")
Let WsSmry.Range("B" & NxtVch + 1 & "").Value = Split(Stear, "_", 2, vbBinaryCompare)(0)
WsSmry.Hyperlinks.Add Anchor:=WsSmry.Range("C" & NxtVch + 1 & ""), Address:="", SubAddress:="V" & Format(NxtVch, "0000") & "!A1", TextToDisplay:="Go To Sheet"
'4e) Add next voucher
WsTp.Copy After:=WsDta
Let ActiveSheet.Name = "V" & Format(NxtVch, "0000")
Let ThisWorkbook.Worksheets("arrVouch").Range("A1").Resize(UBound(arrVouch(), 1), UBound(arrVouch(), 2)).Value = arrVouch() ' - arrRwsT().JPG - https://imgur.com/syf0PaZ
Let ActiveSheet.Range("A1").Resize(UBound(arrVouch(), 1), UBound(arrVouch(), 2)).Value = arrVouch()
Let arrVouch() = WsTp.Range("A1:K24").Value ' get a new template array

Loop ' While RwCnt < DteSrcRwCnt ' .............................................

Let DteSrcRwCnt = 0 ' ready for next Idt Stear
Next Stear ' === Main Outer loop ================================================== =======================

End Sub

DocAElstein
01-11-2020, 06:29 PM
In support of this Post:
http://www.excelfox.com/forum/showthread.php/2402-Extract-Multiple-Rows-into-a-Limited-Template-based-on-Multiple-Criterias?p=11847&viewfull=1#post11847


Before
_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1VoucherDateLink


2
Worksheet: Summary





After for first two vouchers
_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1VoucherDateLink


2V000101.01.2020Go To Sheet


3V000201.01.2020Go To Sheet


4
Worksheet: Summary





After for all vouchers
Remove this code line

ReDim arrUnicDtsSrc(0 To 0): Let arrUnicDtsSrc(0) = "01.01.2020_99909900 - A" ' ***** I am limiting it to the first unique identifier, ( 01.01.2020_99909900 - A ) just for demo purposes. If you remove this line, then you will see that all dates and sources will be considered

_____ Workbook: BeforeDumpTemplate.xlsm ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D

1VoucherDateLink


2V000101.01.2020Go To Sheet


3V000201.01.2020Go To Sheet


4V000301.01.2020Go To Sheet


5V000401.01.2020Go To Sheet


6V000501.01.2020Go To Sheet


7V000602.01.2020Go To Sheet


8V000703.01.2020Go To Sheet


9V000804.01.2020Go To Sheet


10V000905.01.2020Go To Sheet


11V001006.01.2020Go To Sheet


12V001107.01.2020Go To Sheet


13V001208.01.2020Go To Sheet


14V001309.01.2020Go To Sheet


15V001410.01.2020Go To Sheet


16V001511.01.2020Go To Sheet


17V001612.01.2020Go To Sheet


18V001713.01.2020Go To Sheet


19V001814.01.2020Go To Sheet


20V001915.01.2020Go To Sheet


21
Worksheet: Summary

DocAElstein
01-20-2020, 06:34 PM
Coding for these Threads
https://stackoverflow.com/questions/31439866/multiple-variable-arguments-to-application-ontime
http://www.excelfox.com/forum/showthread.php/2404-Notes-tests-Application-Run-OnTime-Multiple-Variable-Arguments-ByRef-ByVal?p=11870&viewfull=1#post11870
https://stackoverflow.com/questions/31439866/multiple-variable-arguments-to-application-ontime/59812342#59812342

Open workbook - MainFile.xls : https://app.box.com/s/prqhroiqcb0qccewz5si0h5kslsw5i5h

Module “Modul1” in MainFile.xls
(This is the main module from which all macros are run)



Option Explicit
' Public variable code section
Private Pbic_Arg1 As String
Public Pbic_Arg2 As Double


Dim sTemp As String
' _
_


Sub MainMacro() ' https://stackoverflow.com/questions/31439866/multiple-variable-arguments-to-application-ontime/31464597 http://markrowlinson.co.uk/articles.php?id=10
Rem 1
Debug.Print "Rem 1" & vbCr & vbLf & "This workbook module, single arrgument"
' This workbook module, single argument
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.UnderMainMacro 465'": Debug.Print "!'Modul1.UnderMainMacro 465'"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.UnderMainMacro ""465""'": Debug.Print "!'Modul1.UnderMainMacro ""465""'"
Application.OnTime Now(), "'Modul1.UnderMainMacro 465'" ' --- more usual simplified form. In this case I nned the extra Modul1. because Sub UnderMainMacro( ) is private
Debug.Print vbCr & vbLf & "UverFile module, single argument"
' UverFile module, single argument
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'Modul1.MacroInUverFile 465'": Debug.Print "!'Modul1.MacroInUverFile 465'"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'Modul1.MacroInUverFile ""465""'": Debug.Print "!'Modul1.MacroInUverFile ""465""'"
Debug.Print vbCr & vbLf & "Thisworkbook module, multiple arguments"
' Thisworkbook module, multiple arguments
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.UnderUnderMainMacro 465, 25'": Debug.Print "!'Modul1.UnderUnderMainMacro 465, 25'"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.UnderUnderMainMacro 465, ""25""'": Debug.Print "!'Modul1.UnderUnderMainMacro 465, ""25""' "
Application.OnTime Now(), "'UnderUnderMainMacro 465, 25 '" ' --- more usual simplified form. I don't even need the extra Modul1. because it is not private
Debug.Print vbCr & vbLf & "UverFile module, multiple argument"
' UverFile module, multiple argument
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'Modul1.MacroUnderMacroInUverFile 465, 25'": Debug.Print "!'Modul1.MacroUnderMacroInUverFile 465, 25'"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'Modul1.MacroUndermacroInUverFile 465, ""25""'": Debug.Print "!'Modul1.MacroUndermacroInUverFile 465, ""25""'"
Debug.Print vbCr & vbLf & "mess about with argument positions"
' mess about with argument positions
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.UnderUnderMainMacro 465 , ""25"" '": Debug.Print "!'Modul1.UnderUnderMainMacro 465 , ""25"" '"
Debug.Print vbCr & vbLf & "This workbook first worksheet code module, single arrgument"
' This workbook first worksheet code module, single arrgument
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWsCodeModule 465'": Debug.Print "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWcCodeModule 465'"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWsCodeModule ""465""'": Debug.Print "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWcCodeModule ""465""'"
Debug.Print vbCr & vbLf & "UverFile first worksheet code module, single arrgument"
' UverFile first worksheet code module, single arrgument
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModule 465'": Debug.Print "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModule 465'"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModule ""465""'": Debug.Print "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModule ""465""'"
Debug.Print vbCr & vbLf & "This workbook first worksheet code module, multiple arguments"
' This workbook first worksheet code module, multiple arguments
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWsCodeModuleMultipleArguments 465 , ""25"" '": Debug.Print "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWcCodeModuleMultipleArguments 465 , ""25"" '"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWsCodeModuleMultipleArguments ""465"" , 25 '": Debug.Print "!'" & ThisWorkbook.Worksheets.Item(1).CodeName & ".InLisWbFirstWcCodeModuleMultipleArguments ""465"" , 25 '"
Debug.Print vbCr & vbLf & "UverFile first worksheet code module, Multiple arrgument"
' UverFile first worksheet code module, Multiple arrgument
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModuleMultipleArguments 465 , ""25"" '": Debug.Print "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModuleMultipleArguments 465 , ""25"" '"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & "UverFile.xls" & "'" & "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModuleMultipleArguments ""465"" , ""25"" '": Debug.Print "!'" & "Tabelle1" & ".InUverFileFirstWsCodeModuleMultipleArguments ""465"" , ""25"" '"
Debug.Print vbCr & vbLf & "Doubles do not have to be in quotes either ' This workbook module, double argument arrgument"
' Doubles do not have to be in quotes either ' This workbook module, double argument arrgument
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.DoubleCheck 465.5 , ""25.4"" '": Debug.Print "!'Modul1.DoubleCheck 465.5 , ""25.4"" '"

Rem 2 Variables
Debug.Print vbCr & vbLf & "Rem 2 Variables" & vbCr & vbLf & "'2a) ""Pseudo"" variables use"
'2a) "Pseudo" variables use
Dim Arg1_str465 As String, Arg2_Dbl25 As Double
Let Arg1_str465 = "465.42": Let Arg2_Dbl25 = 25.4
' Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.DoubleCheck Arg1_str465 , Arg2_Dbl25 '": Debug.Print "!'Modul1.DoubleCheck Arg1_str465 , Arg2Db_l25 '" ' This code line will not work, that is to say it will not find the varables and take 0 values when VBA later runs the Scheduled macro, Sub DoubleCheck( )
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.DoubleCheck """ & Arg1_str465 & """ , """ & Arg2_Dbl25 & """ '": Debug.Print "!'Modul1.DoubleCheck """ & Arg1_str465 & """ , """ & Arg2_Dbl25 & """ '"
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.DoubleCheck """ & Arg1_str465 & """ , " & Arg2_Dbl25 & " '": Debug.Print "!'Modul1.DoubleCheck """ & Arg1_str465 & """ , " & Arg2_Dbl25 & " '"
Debug.Print vbCr & vbLf & "'2b) Real varable use"
'2b) Real varable use
Let Modul1.Pbic_Arg1 = "465.42": Let Pbic_Arg2 = 25.4
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.DoubleCheck Modul1.Pbic_Arg1 , Pbic_Arg2 '": Debug.Print "!'Modul1.DoubleCheck Modul1.Pbic_Arg1 , Pbic_Arg2 '"

Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.DoubleCheck Modul1.Pbic_Arg1, Pbic_Arg2'"
'' Debug.Print Pbic_Arg2 '' This gives 999.99 in Debug F8 mode , 25.4 in normal run

Rem 3 ByRef check
Application.OnTime Now(), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.ByRefCheck'"
Application.OnTime Now() + TimeValue("00:00:00"), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.ByRefCheck'"
Application.OnTime Now() + TimeValue("00:00:01"), "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'" & "!'Modul1.ByRefCheck'"
End Sub
Private Sub UnderMainMacro(ByVal Nmbr As Long)
MsgBox prompt:="Arg1 is " & Nmbr
End Sub
Sub UnderUnderMainMacro(ByVal Nmbr As Long, ByVal NuverNmbr As Long)
MsgBox prompt:="Arg1 is " & Nmbr & ", Arg2 is " & NuverNmbr
End Sub
Sub DoubleCheck(ByVal DblNmr1 As Double, ByRef DblNmr2 As Double) ' provided the signature line is declared appropriately, all number argument types dont have to be in ""
MsgBox prompt:="Arg1 is " & DblNmr1 & ", Arg2 is " & DblNmr2
Let DblNmr2 = 999.99
End Sub


Sub ByRefCheck()
Debug.Print vbCr & vbLf & vbCr & vbLf & vbCr & vbLf & "Rem 3 ByRef Check" & vbCr & vbLf & Pbic_Arg2
End Sub

DocAElstein
01-21-2020, 04:57 PM
Coding in support of this Thread




Option Explicit
' Module scope variable code section
Public Eye As Long
Private Jay As Long
Dim KEh As Long

' Main scheduling macro 1
Sub ByVal_GEhtitsAppObj_1()
1 Application.OnTime Now(), "'CalledByVal Eye, Jay, KEh'"
Let Eye = 11: Let Jay = 12: Let KEh = 13

Application.OnTime Now() + TimeValue("00:00:01"), "'WtchaGotModScopeVariables'"
End Sub

' Main scheduling macro 2
Sub ByVal_GEhtitsAppObj_2()
2 Application.OnTime Now(), "'CalledByVal Module1.Eye, Module1.Jay, Module1.KEh'" '_--- Fix _ 2) Module1.MyVariable
Let Eye = 21: Let Jay = 22: Let KEh = 23

Application.OnTime Now() + TimeValue("00:00:01"), "'WtchaGotModScopeVariables'"
End Sub

' Main scheduling macro 3
Sub ByRef_GEhtitsAppObj_3()
3 Application.OnTime Now(), "'CalledByRef Eye, Jay, KEh'"
Let Eye = 31: Let Jay = 32: Let KEh = 33

Application.OnTime Now() + TimeValue("00:00:01"), "'WtchaGotModScopeVariables'"
End Sub

' Main scheduling macro 4
Sub ByRef_GEhtitsAppObj_4()
4 Application.OnTime Now(), "'CalledByRef Module1.Eye, Module1.Jay, Module1.KEh'" '_--- Fix _ 2) Module1.MyVariable
Let Eye = 41: Let Jay = 42: Let KEh = 43

' Application.OnTime Now(), "'WtchaGotModScopeVariables'" ' ByRef is not working if this is done
Application.OnTime Now() + TimeValue("00:00:01"), "'WtchaGotModScopeVariables'" '_--- Fix _ 1) to get ByRef to work
End Sub

Sub WtchaGotModScopeVariables()
Debug.Print Eye & " " & Jay & " " & KEh & vbCr & vbLf
End Sub





Sub CalledByVal(ByVal I As Long, ByVal J As Long, ByVal K As Long)
Debug.Print I & " " & J & " " & K
Let I = I + 1000: Let J = J + 1000: Let K = K + 1000
End Sub
Sub CalledByRef(ByRef I As Long, ByRef J As Long, ByRef K As Long)
Debug.Print I & " " & J & " " & K
Let I = I + 2000: Let J = J + 2000: Let K = K + 2000
End Sub



'Results
' Macro 1
' 11 0 0
' 11 12 13
'
' Macro 2
' 21 22 23
' 21 22 23
'
' Macro 3
'
' Fail!!!!!
'
'
' Macro 4
' 41 42 43
' 2041 2042 2043
'
'
'
'
'
'
'
'
'











































































































'
'
'
'
'
'
'
'
'
'
'

Sub GEhtitsAppObject()
1
2 Rem 1 Simple use of variables
Let Eye = 31: Let Jay = 32: Let KEh = 33
3 Debug.Print Eye & " " & Jay & " " & KEh
Let Eye = 41: Let Jay = 42: Let KEh = 43
4 Debug.Print Module1.Eye & " " & Module1.Jay & " " & Module1.KEh
5
6 Rem 2 Call ing Subs with variable arguments
Let Eye = 71: Let Jay = 72: Let KEh = 73
7 Call CalledByVal(Eye, Jay, KEh)
Let Eye = 81: Let Jay = 82: Let KEh = 83
8 Call CalledByVal(Module1.Eye, Module1.Jay, Module1.KEh)
9
Let Eye = 101: Let Jay = 102: Let KEh = 103
10 Call CalledByRef(Eye, Jay, KEh)
Let Eye = 111: Let Jay = 112: Let KEh = 113
11 Call CalledByRef(Module1.Eye, Module1.Jay, Module1.KEh)
12
13 Rem 3 Application.OnTime
Let Eye = 141: Let Jay = 142: Let KEh = 143
14 Application.OnTime Now(), "'CalledByVal Module1.Eye, Module1.Jay, Module1.KEh'"
Let Eye = 151: Let Jay = 152: Let KEh = 153
15 Application.OnTime Now(), "'CalledByVal Eye, Jay, KEh'"
16
Let Eye = 171: Let Jay = 172: Let KEh = 173
17 'Application.OnTime Now(), "'CalledByRef Eye, Jay, KEh'"
Let Eye = 181: Let Jay = 182: Let KEh = 183
18 Application.OnTime Now(), "'CalledByRef Module1.Eye, Module1.Jay, Module1.KEh'"
19
End Sub







'20 Rem 4 Application.Run
' Let Eye = 211: Let Jay = 212: Let KEh = 213
'21 Application.Run "CalledByVal", Eye, Jay, KEh
' Debug.Print Eye & " " & Jay & " " & KEh
'
' Let Eye = 221: Let Jay = 222: Let KEh = 223
'22 Application.Run "CalledByVal", Module1.Eye, Module1.Jay, Module1.KEh
' Debug.Print Eye & " " & Jay & " " & KEh
'23
'
' Let Eye = 241: Let Jay = 242: Let KEh = 243
'24 Application.Run "CalledByRef", Module1.Eye, Module1.Jay, Module1.KEh
' Debug.Print Eye & " " & Jay & " " & KEh
'
' Let Eye = 251: Let Jay = 252: Let KEh = 253
'25 Application.Run "CalledByRef", Eye, Jay, KEh
' Debug.Print Eye & " " & Jay & " " & KEh
'
'End Sub
' Sub CalledByVal(ByVal I As Long, ByVal J As Long, ByVal K As Long)
' Debug.Print I & " " & J & " " & K
' Let I = I + 1000: Let J = J + 1000: Let K = K + 1000
' End Sub
' Sub CalledByRef(ByRef I As Long, ByRef J As Long, ByRef K As Long)
' Debug.Print I & " " & J & " " & K
' Let I = I + 2000: Let J = J + 2000: Let K = K + 2000
' End Sub

DocAElstein
02-05-2020, 10:50 PM
In support of this thread
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12138&viewfull=1#post12138



dism.exe /Online /Get-Drivers > "C:\Users\Elston\Desktop\3rdparty driverlist.txt"


Tool zur Imageverwaltung fr die Bereitstellung
Version: 10.0.17134.1

Abbildversion: 10.0.17134.1246

Liste der Treiber von Drittanbietern wird aus dem Treiberspeicher abgerufen...

Treiberpaketauflistung:

Ver"ffentlichter Name : oem0.inf
Originaldateiname : prnms009.inf
Windows-intern : Nein
Klassenname : Printer
Anbietername : Microsoft
Datum : 21.06.2006
Version : 10.0.17134.1

Ver"ffentlichter Name : oem1.inf
Originaldateiname : prnms001.inf
Windows-intern : Nein
Klassenname : Printer
Anbietername : Microsoft
Datum : 21.06.2006
Version : 10.0.17134.1

Ver"ffentlichter Name : oem2.inf
Originaldateiname : igdlh.inf
Windows-intern : Nein
Klassenname : Display
Anbietername : Intel Corporation
Datum : 11.03.2013
Version : 8.15.10.2702

Ver"ffentlichter Name : oem3.inf
Originaldateiname : hpygid20_v4.inf
Windows-intern : Nein
Klassenname : Printer
Anbietername : HP
Datum : 29.05.2017
Version : 20.79.1.6692

Der Vorgang wurde erfolgreich beendet.





dism /online /export-driver /destination: "C:\Users\Elston\Desktop\driverbackupBefore"
Export-WindowsDriver -Online -Destination "C:\Users\MeinPC\Desktop\PowerShell driverbackup"



_____ Workbook: wbCodesBeforeFrom cmd prompt.xlsm ( Using Excel 2007 32 bit )

F:\Windows\Windows 10\Win 10 Devices\driverbackupdriverbackup



F:\Windows\Windows 10\Win 10 Devices\driverbackup\hpygid20_v4.inf_amd64_01bab60 e80914ef1hpygid20_v4.inf_amd64_01bab60e80914ef1

hp8720.bag

hpgid20v4-bidiEvent.xml

hpgid20v4-bidiSPM.xml

hpgid20v4-bidiUSB-OPA.xml

hpgid20v4-bidiUSB.js

hpgid20v4-bidiWSD.xml

hpgid20v4-constraints.js

hpgid20v4-PipelineConfig.xml

hpgid20v4cfg.gdl

hpgid20v4help.cab

hpgid20v4map.xml

hpgid20v4que.xml

hpygid20_8720-manifest.ini

hpygid20_v4.cat

hpygid20_v4.inf

hpygid20_v4.PNF



F:\Windows\Windows 10\Win 10 Devices\driverbackup\hpygid20_v4.inf_amd64_01bab60 e80914ef1\amd64amd64

hpbxpsv420.dll

hpgid20v4PE.exe

hpgid20v4PELib.dll

hpgid20v4_symbols.gpd

hpoj_8720_v4.gpd

hpUIMDDialog20.dll

hpygiddrv20.dll

hpygidres20.dll

userfors.dll



F:\Windows\Windows 10\Win 10 Devices\driverbackup\igdlh.inf_amd64_c9077a4bbb395 caaigdlh.inf_amd64_c9077a4bbb395caa

igcompkrng500.bin

igd10umd32.dll

igd10umd64.dll

igdkmd64.sys

igdlh.cat

igdlh.inf

igdlh.PNF

igdumd32.dll

igdumd64.dll

igfcg500m.bin

igkrng500.bin

iglhcp32.dll

iglhcp64.dll

iglhsip32.dll

iglhsip64.dll

iglhxa64.cpa

iglhxa64.vp

iglhxc64.vp

iglhxg64.vp

iglhxo64.vp

iglhxs64.vp



F:\Windows\Windows 10\Win 10 Devices\driverbackup\prnms001.inf_amd64_cb0feabdd7 1f0e97prnms001.inf_amd64_cb0feabdd71f0e97

MXDW-manifest.ini

MXDW-pipelineconfig.xml

MXDW.gpd

mxdwdui.dll

prnms001.cat

prnms001.Inf

prnms001.PNF



F:\Windows\Windows 10\Win 10 Devices\driverbackup\prnms009.inf_amd64_5887f9f923 285dd6prnms009.inf_amd64_5887f9f923285dd6

MPDW-constraints.js

MPDW-manifest.ini

MPDW-PDC.xml

MPDW-pipelineconfig.xml

MPDW_devmode_map.xml

prnms009.cat

prnms009.Inf

prnms009.PNF
Worksheet: cmd

DocAElstein
02-08-2020, 07:32 PM
In support of this Post:
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12124&viewfull=1#post12124

_____ Workbook: wbCodesBeforeFrom cmd prompt.xlsm ( Using Excel 2007 32 bit )



Audio, Video und Gamecontroller

High definition Audio-Gerät













High definition Audio-Gerät













Audioeingänge und - ausgänge

47PL3605h(High definition Audio-Gerät



Digitalaudio (S/PDIF) (2 - High Definition Audio.Gerät)



Digitalaudio (S/PDIF) (2 - High Definition Audio.Gerät)



Computer

ACIPx64-basierter PC



Druckwarteshlangen

Fax



Micrtosoft print to PDF



Microsoft XPS Document Writer



OneNote



Stammdruckwarteshlange



DVD/CD-ROM-Laufwerke

TSSTcorpDVD-ROM SH-D163C ATA Device



Eingabegeräte (Human Interface Device)

HID-Konformer Sysgtemcontroller



HID-Konformer Benutzersteuergeräte



HID-Konformer vom Hersteller definiertes Gerät



HID-Konformer vom Hersteller definiertes Gerät



USB-Eingabegerät







USB-Eingabegerät







Grafikkarten

Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1)











































IDE ATA/ATAPI-Controller

ATA Channel 0







ATA Chanel 1







Intel(R) 82801GB/GR/GH(ICH7 Familie) Serieller ATA-Speichercomtroller - 27C0









IEEE 1394-Hostcontroller

OHCI-konformer texas Instruments1394-Hostcontroller



Laufwerk

General UDisk USB Device







SAMSUNG HD253GJ ATA Device







Mäuse und andere Zeigegeräte

HID-konforme Mause





Monitore

PnP-Monitore (Standard)



Netzwerkadaptor

Realitek PCIe GBE Family Controller



WAN Miniport (IKEv2)



WAN Miniport (IP)





WAN Miniport (IPv6)





WAN Miniport (L2DP)



WAN Miniport (Network Monitor)





WAN Miniport (PPPOE)



WAN Miniport (PPTP)



WAN Miniport (SSTP)



Prozessoren

Intel(R) Core(TM)2 Duo CPU E750 @ 2.93GHz



Intel(R) Core(TM)2 Duo CPU E750 @ 2.93GHz



Softwaregeräte

Brother DCP-1610W series [e89eb44818d]



ELSTON-PC: elston:



HPB6102A (HP Officejet Pro 8720)



Microsoft Device Asssociation Root Enumerator



Microsoft GS Wavetable Synthesis



Microsoft RRAS Root Enumerator



NPIA27BB4 (HP Laserjet 200 colorMFP M275nw)



Speichercontroller

Microsoft-Controller für Speicherplätze





Systemgeräte


1ACIP-Schalter




2Busenumerator für Verbundgeräte

compositebus.inf_amd64_bcb89b3386563bd7\CompositeB us.sys


3CPU-zu-EA-Controller




4DMA-Controller




5Enumerator für virtuelle NDIS-Nertzwerkadaptor




6High Definition Audio Controller










7Hochpräzisionsereigniszeitgeber




8Legacygerät




9LPC-Controller




10Microsoft ACPI-Konformers System




11Microsoft virtueller Datenträgerenumerator




12Microsoft-Systemverwaltungs-BIOS-Treiber




13Numerischer Coprozessor




14PCI-Bus




15PCI-zu-PCI-Brücke




16PCI-zu-PCI-Brücke




17PCI-zu-PCI-Brücke




18PnP-Softwaregeräte-Enumerator

swenum.inf_amd64_ea7b19c04e7a8136\swenum.sys


19Programmierbarer Interruptcontroller




20Redirector-Bus für Remotedesktop-Geräte




21SM-Bus-Controller




22Systrem CMOS/Echtzeituhr




23Systemlautsprecher




24Systemzeitgeber




25UMBus-Stamm-Busenumerator



Tastaturen

HID-Tastatur





Tragbare Geräte

USB_China2







USB-Controller


1Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CB








2Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27C9








3Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CA








4Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27C8








5Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CC








6USB-Massenspeichergeräte




7USB-Root-Hub






8USB-Root-Hub






9USB-Root-Hub






10USB-Root-Hub






11USB-Root-Hub






12USB-Verbundgeräte


Worksheet: Manual



wbCodesBeforeFrom cmd prompt.xlsm : https://app.box.com/s/hix9sjernnbdu9vk2oqgspg8z00t9u8j

DocAElstein
02-08-2020, 07:34 PM
_____ Workbook: wbCodesBeforeFrom cmd prompt.xlsm ( Using Excel 2007 32 bit )

C:\Windows\system32\DRIVERS\dmk.sys

C:\Windows\system32\DRIVERS\HdAudio.sys

C:\Windows\system32\drivers\ksthunk.sys

C:\Windows\system32\DRIVERS\portcls.sys

C:\Windows\system32\SysFxUl.dll

C:\Windows\system32\WMALFXGFXDSP.dll



C:\Windows\system32\DRIVERS\dmk.sys

C:\Windows\system32\DRIVERS\HdAudio.sys

C:\Windows\system32\drivers\ksthunk.sys

C:\Windows\system32\DRIVERS\portcls.sys

C:\Windows\system32\SysFxUl.dll

C:\Windows\system32\WMALFXGFXDSP.dll















































C:\Windows\system32\DRIVERS\cdrom.sys





















C:\Windows\system32\DRIVERS\hidclass.sys

C:\Windows\system32\DRIVERS\hidparse.sys

C:\Windows\system32\DRIVERS\hidusb.sys



C:\Windows\system32\DRIVERS\hidclass.sys

C:\Windows\system32\DRIVERS\hidparse.sys

C:\Windows\system32\DRIVERS\hidusb.sys





C:\Windows\system32\DRIVERS\igdkmd64.sys

C:\Windows\system32\igcompkmg500.bin

C:\Windows\system32\igd10umd64.dll

C:\Windows\system32\igdumd64.dll

C:\Windows\system32\igfcg500m.bin

C:\Windows\system32\igkmg500.bin

C:\Windows\system32\iglhcp64.dll

C:\Windows\system32\iglhsip64.dl

C:\Windows\system32\iglhxa64.cpa

C:\Windows\system32\iglhxa64.vp

C:\Windows\system32\iglhxc64.vp

C:\Windows\system32\iglhxg64.vp

C:\Windows\system32\iglhxo64.vp

C:\Windows\system32\iglhxs64.vp

C:\Windows\SysWow64\igcompkmg500.bin

C:\Windows\SysWow64\igd10umd32.dll

C:\Windows\SysWow64\igdumd32.dll

C:\Windows\SysWow64\igfcg500m.bin

C:\Windows\SysWow64\igkmg500.bin

C:\Windows\SysWow64\iglhcp32.dll

C:\Windows\SysWow64\iglhsip32.dll





C:\Windows\system32\DRIVERS\atapi.sys

C:\Windows\system32\DRIVERS\ataport.sys





C:\Windows\system32\DRIVERS\atapi.sys

C:\Windows\system32\DRIVERS\ataport.sys





C:\Windows\system32\DRIVERS\atapi.sys

C:\Windows\system32\DRIVERS\ataport.sys

C:\Windows\system32\DRIVERS\intelide.sys

C:\Windows\system32\DRIVERS\pciidx.sys





C:\Windows\system32\DRIVERS\1394ohci.sys





C:\Windows\system32\DRIVERS\disk.sys

C:\Windows\system32\DRIVERS\EhStorClass.sys

C:\Windows\system32\DRIVERS\partmgr.sys



C:\Windows\system32\DRIVERS\disk.sys

C:\Windows\system32\drivers\EhStorClass.sys

C:\Windows\system32\drivers\partmgr.sys





C:\Windows\system32\DRIVERS\mouclass.sys

C:\Windows\system32\DRIVERS\mouhid.sys





C:\Windows\system32\DRIVERS\monitor.sys





C:\Windows\system32\DRIVERS\rt640x64.sys



C:\Windows\system32\drivers\AgileVpn.sys



C:\Windows\system32\DRIVERS\ndistapi.sys

C:\Windows\system32\DRIVERS\ndiswan.sys



C:\Windows\system32\DRIVERS\ndistapi.sys

C:\Windows\system32\DRIVERS\ndiswan.sys



C:\Windows\system32\DRIVERS\rasl2tp.sys



C:\Windows\system32\DRIVERS\ndistapi.sys

C:\Windows\system32\DRIVERS\ndiswan.sys



C:\Windows\system32\DRIVERS\rasppppoe.sys



C:\Windows\system32\drivers\raspptp.swys



C:\Windows\system32\DRIVERS\rassstptp.sys





C:\Windows\system32\DRIVERS\intelppm.sys



C:\Windows\system32\DRIVERS\intelppm.sys



































C:\Windows\system32\DRIVERS\spacedump.sys

C:\Windows\system32\DRIVERS\spaceport.sys





















C:\Windows\system32\drivers\NdisVirtualBus.sys





C:\Windows\system32\DRIVERS\dmk.sys

C:\Windows\system32\DRIVERS\hdaudbus.sys

C:\Windows\system32\DRIVERS\portcls.sys











C:\Windows\system32\DRIVERS\msisadrv.sys



C:\Windows\system32\DRIVERS\acpi.sys



C:\Windows\system32\DRIVERS\vdrvroot.sys



C:\Windows\system32\DRIVERS\mssmbios.sys







C:\Windows\system32\DRIVERS\pci.sys



C:\Windows\system32\DRIVERS\pci.sys



C:\Windows\system32\DRIVERS\pci.sys



C:\Windows\system32\DRIVERS\pci.sys











C:\Windows\system32\DRIVERS\rdpbus.sys



















C:\Windows\system32\DRIVERS\umbus.sys





C:\Windows\system32\DRIVERS\kbdclass.sys

C:\Windows\system32\DRIVERS\kbdhid.sys





C:\Windows\system32\DRIVERS\UMDF\WpdFs.dll

C:\Windows\system32\drivers\WpdUpFltr.sys

C:\Windows\system32\DRIVERS\WUDFRd.sys





C:\Windows\system32\drivers\usbhub.sys

C:\Windows\system32\drivers\usbport.sys

C:\Windows\system32\drivers\usbuhci.sys



C:\Windows\system32\drivers\usbhub.sys

C:\Windows\system32\drivers\usbport.sys

C:\Windows\system32\drivers\usbuhci.sys



C:\Windows\system32\drivers\usbhub.sys

C:\Windows\system32\drivers\usbport.sys

C:\Windows\system32\drivers\usbuhci.sys



C:\Windows\system32\drivers\usbhub.sys

C:\Windows\system32\drivers\usbport.sys

C:\Windows\system32\drivers\usbuhci.sys



C:\Windows\system32\drivers\usbehci.sys

C:\Windows\system32\drivers\usbhub.sys

C:\Windows\system32\drivers\usbport.sys



C:\Windows\system32\drivers\USBSTOR.SYS



C:\Windows\system32\drivers\usbd.sys

C:\Windows\system32\drivers\usbhub.sys



C:\Windows\system32\drivers\usbd.sys

C:\Windows\system32\drivers\usbhub.sys



C:\Windows\system32\drivers\usbd.sys

C:\Windows\system32\drivers\usbhub.sys



C:\Windows\system32\drivers\usbd.sys

C:\Windows\system32\drivers\usbhub.sys



C:\Windows\system32\drivers\usbd.sys

C:\Windows\system32\drivers\usbhub.sys



C:\Windows\system32\drivers\usbccgp.sys
Worksheet: Manual

DocAElstein
02-08-2020, 07:57 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12124&viewfull=1#post12124







Geräte-Manager Before : https://imgur.com/6IT2NC9
2722
https://i.imgur.com/6IT2NC9.jpg



Audio Video und Game Controler 1.JPG : https://imgur.com/pxfQIX9
Audio Video und Game Controler 2.JPG : https://imgur.com/iUPViMn
Audioeingänge und -ausgänge 1.JPG : https://imgur.com/flkUEWD
Audioeingänge und -ausgänge 3.JPG : https://imgur.com/qnYMTjP
Audioeingänge und -ausgänge 2.JPG : https://imgur.com/ILJ1kBf
Computer.JPG : https://imgur.com/NuodN0E
Druckwarteshlange Fax.JPG : https://imgur.com/Uch955O
Druckwarteshlange Microsoft Print to PDF.JPG : https://imgur.com/KGTW8wq
Druckwarteshlange Microsoft XPS Document Writer.JPG : https://imgur.com/lRLmhZO
Druckwarteshlange OneNote.JPG : https://imgur.com/bjLMcGM
Druckwarteshlange Stammdruckwarteshlange.JPG : https://imgur.com/1Ndf2XB
DVD CD-ROM-Laufwerke.JPG : https://imgur.com/daGiajr
Eingabegeräte (Human Interface Decice) 1.JPG : https://imgur.com/GVQjnNv
Eingabegeräte (Human Interface Decice) 2.JPG : https://imgur.com/Fzeu0pS
Eingabegeräte (Human Interface Decice) 3.JPG : https://imgur.com/4TtEjHU
Eingabegeräte (Human Interface Decice) 4.JPG : https://imgur.com/Ng3DVE3
Eingabegeräte (Human Interface Decice) 5.JPG : https://imgur.com/wbFK11u
Eingabegeräte (Human Interface Decice) 6.JPG : https://imgur.com/DbSdltZ
Grafikkarten.JPG : https://imgur.com/dW6OOrI
IDE ATA ATAPI-Controller 1.JPG : https://imgur.com/1rVKfbC
IDE ATA ATAPI-Controller 2.JPG : https://imgur.com/2YI9jdL
IDE ATA ATAPI-Controller 3.JPG : https://imgur.com/L6HbNp4
IEE 1394-Hostcontroller.JPG : https://imgur.com/IwO5pbG
Laufwerk 1.JPG : https://imgur.com/8KyZRiK
Laufwerk 2.JPG : https://imgur.com/eDvgnMH
Mäuse und andere Zeigegeräte.JPG : https://imgur.com/XFl9PcA
Monitore.JPG : https://imgur.com/VAayLlT
Netzwerkadaptor 1.JPG : https://imgur.com/2NiovPn
Netzwerkadaptor 2.JPG : https://imgur.com/xP80QlV
Netzwerkadaptor 3.JPG : https://imgur.com/IpFWH0x
Netzwerkadaptor 4.JPG : https://imgur.com/8pVcZ8M
Netzwerkadaptor 5.JPG : https://imgur.com/S3W35Z3
Netzwerkadaptor 6.JPG : https://imgur.com/lUZDGcP
Netzwerkadaptor 7.JPG : https://imgur.com/dBFnOFD
Netzwerkadaptor 8.JPG : https://imgur.com/rnxwMoN
Netzwerkadaptor 9.JPG : https://imgur.com/WQYsDDk
Prozessoren 1.JPG : https://imgur.com/9B7pMqH
Prozessoren 2.JPG : https://imgur.com/mvfLvOG
Softwaregeräte 1.JPG : https://imgur.com/us8XDDQ
Softwaregeräte 2.JPG : https://imgur.com/q15BRkP
Softwaregeräte 3.JPG : https://imgur.com/AdDBMaz
Softwaregeräte 4.JPG : https://imgur.com/Xswu3mW
Softwaregeräte 5.JPG : https://imgur.com/8YiYQFL
Softwaregeräte 6.JPG : https://imgur.com/RcxBE0o
Softwaregeräte 7.JPG : https://imgur.com/lvXaM9Z
Speichercontroller.JPG : https://imgur.com/IZcPqew
Systemgeräte 1.JPG : https://imgur.com/axWbdSx
Systemgeräte 2.JPG : https://imgur.com/wArJPoq
Systemgeräte 3.JPG : https://imgur.com/i778VGg
Systemgeräte 4.JPG : https://imgur.com/khBWz5F
Systemgeräte 5.JPG : https://imgur.com/sRNIUqw
Systemgeräte 6.JPG : https://imgur.com/gXmMoyM
Systemgeräte 7.JPG : https://imgur.com/TzOrMQb
Systemgeräte 8.JPG : https://imgur.com/CJecHST
Systemgeräte 9.JPG : https://imgur.com/FwH9rrd
Systemgeräte 10.JPG : https://imgur.com/urqGHV8
Systemgeräte 11.JPG : https://imgur.com/Y11hbdk
Systemgeräte 12.JPG : https://imgur.com/ULwFr7T
Systemgeräte 13.JPG : https://imgur.com/218r0g0
Systemgeräte 14.JPG : https://imgur.com/Nr8O15k
Systemgeräte 15.JPG : https://imgur.com/o9sMnlQ
Systemgeräte 16.JPG : https://imgur.com/B7PRKDp
Systemgeräte 17.JPG : https://imgur.com/MMkwaen
Systemgeräte 18.JPG : https://imgur.com/6gE2Afq
Systemgeräte 19.JPG : https://imgur.com/Y7UcvGE
Systemgeräte 20.JPG : https://imgur.com/dVtp9FW
Systemgeräte 21.JPG : https://imgur.com/NHk0epf
Systemgeräte 22.JPG : https://imgur.com/wUN3To1
Systemgeräte 23.JPG : https://imgur.com/uJg3OMi
Systemgeräte 24.JPG : https://imgur.com/9MpF7nk
Systemgeräte 25.JPG : https://imgur.com/cZ4x8Jf
Tastaturen.JPG : https://imgur.com/2eGpdYE
Tragbare Geräte.JPG : https://imgur.com/sLjH1UH
USB-Controller 1.JPG : https://imgur.com/0LtyydZ
USB-Controller 2.JPG : https://imgur.com/ZBkmxaS
USB-Controller 3.JPG : https://imgur.com/ToQj8d8
USB-Controller 4.JPG : https://imgur.com/rGFUyhA
USB-Controller 5.JPG : https://imgur.com/bSYZSOM
USB-Controller 6.JPG : https://imgur.com/w7wk6G5
USB-Controller 7.JPG : https://imgur.com/eGPgFxa
USB-Controller 8.JPG : https://imgur.com/XAEXWmk
USB-Controller 9.JPG : https://imgur.com/GV2mhmg
USB-Controller 10.JPG : https://imgur.com/a3j29CH
USB-Controller 11.JPG : https://imgur.com/KykO1mb


Device Manager Before.JPG : https://imgur.com/DfI49fZ
Geraete Manager Before.xlsm : https://app.box.com/s/sef9l9cr9df7ul7i22cno49uqcqecte0


















wbCodesBeforeFrom cmd prompt.xlsm : https://app.box.com/s/hix9sjernnbdu9vk2oqgspg8z00t9u8j

DocAElstein
02-08-2020, 07:57 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12124&viewfull=1#post12124







Geräte-Manager Before : https://imgur.com/6IT2NC9
2722
https://i.imgur.com/6IT2NC9.jpg





Audio, Video und Gamecontroller
High definition Audio-Gerät
C:\Windows\system32\DRIVERS\dmk.sys
C:\Windows\system32\DRIVERS\HdAudio.sys
C:\Windows\system32\drivers\ksthunk.sys
C:\Windows\system32\DRIVERS\portcls.sys
C:\Windows\system32\SysFxUl.dll
C:\Windows\system32\WMALFXGFXDSP.dll
High definition Audio-Gerät
C:\Windows\system32\DRIVERS\dmk.sys
C:\Windows\system32\DRIVERS\HdAudio.sys
C:\Windows\system32\drivers\ksthunk.sys
C:\Windows\system32\DRIVERS\portcls.sys
C:\Windows\system32\SysFxUl.dll
C:\Windows\system32\WMALFXGFXDSP.dll
Audioeingänge und - ausgänge
47PL3605h(High definition Audio-Gerät

Digitalaudio (S/PDIF) (2 - High Definition Audio.Gerät)

Digitalaudio (S/PDIF) (2 - High Definition Audio.Gerät)

Computer
ACIPx64-basierter PC

Druckwarteshlangen
Fax

Micrtosoft print to PDF

Microsoft XPS Document Writer

OneNote

Stammdruckwarteshlange

DVD/CD-ROM-Laufwerke
TSSTcorpDVD-ROM SH-D163C ATA Device
C:\Windows\system32\DRIVERS\cdrom.sys
Eingabegeräte (Human Interface Device)
HID-Konformer Sysgtemcontroller

HID-Konformer Benutzersteuergeräte

HID-Konformer vom Hersteller definiertes Gerät

HID-Konformer vom Hersteller definiertes Gerät

USB-Eingabegerät
C:\Windows\system32\DRIVERS\hidclass.sys
C:\Windows\system32\DRIVERS\hidparse.sys
C:\Windows\system32\DRIVERS\hidusb.sys
USB-Eingabegerät
C:\Windows\system32\DRIVERS\hidclass.sys
C:\Windows\system32\DRIVERS\hidparse.sys
C:\Windows\system32\DRIVERS\hidusb.sys
Grafikkarten
Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1)
C:\Windows\system32\DRIVERS\igdkmd64.sys
C:\Windows\system32\igcompkmg500.bin
C:\Windows\system32\igd10umd64.dll
C:\Windows\system32\igdumd64.dll
C:\Windows\system32\igfcg500m.bin
C:\Windows\system32\igkmg500.bin
C:\Windows\system32\iglhcp64.dll
C:\Windows\system32\iglhsip64.dl
C:\Windows\system32\iglhxa64.cpa
C:\Windows\system32\iglhxa64.vp
C:\Windows\system32\iglhxc64.vp
C:\Windows\system32\iglhxg64.vp
C:\Windows\system32\iglhxo64.vp
C:\Windows\system32\iglhxs64.vp
C:\Windows\SysWow64\igcompkmg500.bin
C:\Windows\SysWow64\igd10umd32.dll
C:\Windows\SysWow64\igdumd32.dll
C:\Windows\SysWow64\igfcg500m.bin
C:\Windows\SysWow64\igkmg500.bin
C:\Windows\SysWow64\iglhcp32.dll
C:\Windows\SysWow64\iglhsip32.dll
IDE ATA/ATAPI-Controller
ATA Channel 0
C:\Windows\system32\DRIVERS\atapi.sys
C:\Windows\system32\DRIVERS\ataport.sys

ATA Chanel 1
C:\Windows\system32\DRIVERS\atapi.sys
C:\Windows\system32\DRIVERS\ataport.sys

Intel(R) 82801GB/GR/GH(ICH7 Familie) Serieller ATA-Speichercomtroller - 27C0
C:\Windows\system32\DRIVERS\atapi.sys
C:\Windows\system32\DRIVERS\ataport.sys
C:\Windows\system32\DRIVERS\intelide.sys
C:\Windows\system32\DRIVERS\pciidx.sys
IEEE 1394-Hostcontroller
OHCI-konformer texas Instruments1394-Hostcontroller
C:\Windows\system32\DRIVERS\1394ohci.sys
Laufwerk
General UDisk USB Device
C:\Windows\system32\DRIVERS\disk.sys
C:\Windows\system32\DRIVERS\EhStorClass.sys
C:\Windows\system32\DRIVERS\partmgr.sys
SAMSUNG HD253GJ ATA Device
C:\Windows\system32\DRIVERS\disk.sys
C:\Windows\system32\drivers\EhStorClass.sys
C:\Windows\system32\drivers\partmgr.sys
Mäuse und andere Zeigegeräte
HID-konforme Mause
C:\Windows\system32\DRIVERS\mouclass.sys
C:\Windows\system32\DRIVERS\mouhid.sys
Monitore
PnP-Monitore (Standard)
C:\Windows\system32\DRIVERS\monitor.sys
Netzwerkadaptor
Realitek PCIe GBE Family Controller
C:\Windows\system32\DRIVERS\rt640x64.sys
WAN Miniport (IKEv2)
C:\Windows\system32\drivers\AgileVpn.sys
WAN Miniport (IP)
C:\Windows\system32\DRIVERS\ndistapi.sys
C:\Windows\system32\DRIVERS\ndiswan.sys
WAN Miniport (IPv6)
C:\Windows\system32\DRIVERS\ndistapi.sys
C:\Windows\system32\DRIVERS\ndiswan.sys
WAN Miniport (L2DP)
C:\Windows\system32\DRIVERS\rasl2tp.sys
WAN Miniport (Network Monitor)
C:\Windows\system32\DRIVERS\ndistapi.sys
C:\Windows\system32\DRIVERS\ndiswan.sys
WAN Miniport (PPPOE)
C:\Windows\system32\DRIVERS\rasppppoe.sys
WAN Miniport (PPTP)
C:\Windows\system32\drivers\raspptp.swys
WAN Miniport (SSTP)
C:\Windows\system32\DRIVERS\rassstptp.sys
Prozessoren
Intel(R) Core(TM)2 Duo CPU E750 @ 2.93GHz
C:\Windows\system32\DRIVERS\intelppm.sys
Intel(R) Core(TM)2 Duo CPU E750 @ 2.93GHz
C:\Windows\system32\DRIVERS\intelppm.sys
Softwaregeräte
Brother DCP-1610W series [e89eb44818d]

ELSTON-PC: elston:

HPB6102A (HP Officejet Pro 8720)

Microsoft Device Asssociation Root Enumerator

Microsoft GS Wavetable Synthesis

Microsoft RRAS Root Enumerator

NPIA27BB4 (HP Laserjet 200 colorMFP M275nw)

Speichercontroller
Microsoft-Controller für Speicherplätze
C:\Windows\system32\DRIVERS\spacedump.sys
C:\Windows\system32\DRIVERS\spaceport.sys
Systemgeräte
1 ACIP-Schalter

2 Busenumerator für Verbundgeräte
compositebus.inf_amd64_bcb89b3386563bd7\CompositeB us.sys
3 CPU-zu-EA-Controller

4 DMA-Controller

5 Enumerator für virtuelle NDIS-Nertzwerkadaptor
C:\Windows\system32\drivers\NdisVirtualBus.sys
6 High Definition Audio Controller

C:\Windows\system32\DRIVERS\dmk.sys
C:\Windows\system32\DRIVERS\hdaudbus.sys
C:\Windows\system32\DRIVERS\portcls.sys
7 Hochpräzisionsereigniszeitgeber

8 Legacygerät

9 LPC-Controller
C:\Windows\system32\DRIVERS\msisadrv.sys
10 Microsoft ACPI-Konformers System
C:\Windows\system32\DRIVERS\acpi.sys
11 Microsoft virtueller Datenträgerenumerator
C:\Windows\system32\DRIVERS\vdrvroot.sys
12 Microsoft-Systemverwaltungs-BIOS-Treiber
C:\Windows\system32\DRIVERS\mssmbios.sys
13 Numerischer Coprozessor

14 PCI-Bus
C:\Windows\system32\DRIVERS\pci.sys
15 PCI-zu-PCI-Brücke
C:\Windows\system32\DRIVERS\pci.sys
16 PCI-zu-PCI-Brücke
C:\Windows\system32\DRIVERS\pci.sys
17 PCI-zu-PCI-Brücke
C:\Windows\system32\DRIVERS\pci.sys
18 PnP-Softwaregeräte-Enumerator
swenum.inf_amd64_ea7b19c04e7a8136\swenum.sys
19 Programmierbarer Interruptcontroller

20 Redirector-Bus für Remotedesktop-Geräte
C:\Windows\system32\DRIVERS\rdpbus.sys
21 SM-Bus-Controller

22 Systrem CMOS/Echtzeituhr

23 Systemlautsprecher

24 Systemzeitgeber

25 UMBus-Stamm-Busenumerator
C:\Windows\system32\DRIVERS\umbus.sys
Tastaturen
HID-Tastatur
C:\Windows\system32\DRIVERS\kbdclass.sys
C:\Windows\system32\DRIVERS\kbdhid.sys
Tragbare Geräte
USB_China2
C:\Windows\system32\DRIVERS\UMDF\WpdFs.dll
C:\Windows\system32\drivers\WpdUpFltr.sys
C:\Windows\system32\DRIVERS\WUDFRd.sys
USB-Controller
1 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CB
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
2 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27C9
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
3 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CA
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
4 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27C8
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
5 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CC
C:\Windows\system32\drivers\usbehci.sys
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
6 USB-Massenspeichergeräte
C:\Windows\system32\drivers\USBSTOR.SYS
7 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
8 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
9 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
10 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
11 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
12 USB-Verbundgeräte
C:\Windows\system32\drivers\usbccgp.sys







120




Device Manager Before.JPG : https://imgur.com/DfI49fZ
Geraete Manager Before.xlsm : https://app.box.com/s/sef9l9cr9df7ul7i22cno49uqcqecte0


















wbCodesBeforeFrom cmd prompt.xlsm : https://app.box.com/s/hix9sjernnbdu9vk2oqgspg8z00t9u8j

DocAElstein
02-08-2020, 11:26 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12124&viewfull=1#post12124



Geräte-Manager Before : https://imgur.com/6IT2NC9
2722
https://i.imgur.com/6IT2NC9.jpg






Audio, Video und Gamecontroller
High definition Audio-Gerät
C:\Windows\system32\DRIVERS\dmk.sys
C:\Windows\system32\DRIVERS\HdAudio.sys
C:\Windows\system32\drivers\ksthunk.sys
C:\Windows\system32\DRIVERS\portcls.sys
C:\Windows\system32\SysFxUl.dll
C:\Windows\system32\WMALFXGFXDSP.dll
High definition Audio-Gerät
C:\Windows\system32\DRIVERS\dmk.sys
C:\Windows\system32\DRIVERS\HdAudio.sys
C:\Windows\system32\drivers\ksthunk.sys
C:\Windows\system32\DRIVERS\portcls.sys
C:\Windows\system32\SysFxUl.dll
C:\Windows\system32\WMALFXGFXDSP.dll
Audioeingänge und - ausgänge
47PL3605h(High definition Audio-Gerät

Digitalaudio (S/PDIF) (2 - High Definition Audio.Gerät)

Digitalaudio (S/PDIF) (2 - High Definition Audio.Gerät)

Computer
ACIPx64-basierter PC

Druckwarteshlangen
Fax

Micrtosoft print to PDF

Microsoft XPS Document Writer

OneNote

Stammdruckwarteshlange

DVD/CD-ROM-Laufwerke
TSSTcorpDVD-ROM SH-D163C ATA Device
C:\Windows\system32\DRIVERS\cdrom.sys
Eingabegeräte (Human Interface Device)
HID-Konformer Sysgtemcontroller

HID-Konformer Benutzersteuergeräte

HID-Konformer vom Hersteller definiertes Gerät

HID-Konformer vom Hersteller definiertes Gerät

USB-Eingabegerät
C:\Windows\system32\DRIVERS\hidclass.sys
C:\Windows\system32\DRIVERS\hidparse.sys
C:\Windows\system32\DRIVERS\hidusb.sys
USB-Eingabegerät
C:\Windows\system32\DRIVERS\hidclass.sys
C:\Windows\system32\DRIVERS\hidparse.sys
C:\Windows\system32\DRIVERS\hidusb.sys
Grafikkarten
Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1)
C:\Windows\system32\DRIVERS\igdkmd64.sys
C:\Windows\system32\igcompkmg500.bin
C:\Windows\system32\igd10umd64.dll
C:\Windows\system32\igdumd64.dll
C:\Windows\system32\igfcg500m.bin
C:\Windows\system32\igkmg500.bin
C:\Windows\system32\iglhcp64.dll
C:\Windows\system32\iglhsip64.dl
C:\Windows\system32\iglhxa64.cpa
C:\Windows\system32\iglhxa64.vp
C:\Windows\system32\iglhxc64.vp
C:\Windows\system32\iglhxg64.vp
C:\Windows\system32\iglhxo64.vp
C:\Windows\system32\iglhxs64.vp
C:\Windows\SysWow64\igcompkmg500.bin
C:\Windows\SysWow64\igd10umd32.dll
C:\Windows\SysWow64\igdumd32.dll
C:\Windows\SysWow64\igfcg500m.bin
C:\Windows\SysWow64\igkmg500.bin
C:\Windows\SysWow64\iglhcp32.dll
C:\Windows\SysWow64\iglhsip32.dll
IDE ATA/ATAPI-Controller
ATA Channel 0
C:\Windows\system32\DRIVERS\atapi.sys
C:\Windows\system32\DRIVERS\ataport.sys

ATA Chanel 1
C:\Windows\system32\DRIVERS\atapi.sys
C:\Windows\system32\DRIVERS\ataport.sys

Intel(R) 82801GB/GR/GH(ICH7 Familie) Serieller ATA-Speichercomtroller - 27C0
C:\Windows\system32\DRIVERS\atapi.sys
C:\Windows\system32\DRIVERS\ataport.sys
C:\Windows\system32\DRIVERS\intelide.sys
C:\Windows\system32\DRIVERS\pciidx.sys
IEEE 1394-Hostcontroller
OHCI-konformer texas Instruments1394-Hostcontroller
C:\Windows\system32\DRIVERS\1394ohci.sys
Laufwerk
General UDisk USB Device
C:\Windows\system32\DRIVERS\disk.sys
C:\Windows\system32\DRIVERS\EhStorClass.sys
C:\Windows\system32\DRIVERS\partmgr.sys
SAMSUNG HD253GJ ATA Device
C:\Windows\system32\DRIVERS\disk.sys
C:\Windows\system32\drivers\EhStorClass.sys
C:\Windows\system32\drivers\partmgr.sys
Mäuse und andere Zeigegeräte
HID-konforme Mause
C:\Windows\system32\DRIVERS\mouclass.sys
C:\Windows\system32\DRIVERS\mouhid.sys
Monitore
PnP-Monitore (Standard)
C:\Windows\system32\DRIVERS\monitor.sys
Netzwerkadaptor
Realitek PCIe GBE Family Controller
C:\Windows\system32\DRIVERS\rt640x64.sys
WAN Miniport (IKEv2)
C:\Windows\system32\drivers\AgileVpn.sys
WAN Miniport (IP)
C:\Windows\system32\DRIVERS\ndistapi.sys
C:\Windows\system32\DRIVERS\ndiswan.sys
WAN Miniport (IPv6)
C:\Windows\system32\DRIVERS\ndistapi.sys
C:\Windows\system32\DRIVERS\ndiswan.sys
WAN Miniport (L2DP)
C:\Windows\system32\DRIVERS\rasl2tp.sys
WAN Miniport (Network Monitor)
C:\Windows\system32\DRIVERS\ndistapi.sys
C:\Windows\system32\DRIVERS\ndiswan.sys
WAN Miniport (PPPOE)
C:\Windows\system32\DRIVERS\rasppppoe.sys
WAN Miniport (PPTP)
C:\Windows\system32\drivers\raspptp.swys
WAN Miniport (SSTP)
C:\Windows\system32\DRIVERS\rassstptp.sys
Prozessoren
Intel(R) Core(TM)2 Duo CPU E750 @ 2.93GHz
C:\Windows\system32\DRIVERS\intelppm.sys
Intel(R) Core(TM)2 Duo CPU E750 @ 2.93GHz
C:\Windows\system32\DRIVERS\intelppm.sys
Softwaregeräte
Brother DCP-1610W series [e89eb44818d]

ELSTON-PC: elston:

HPB6102A (HP Officejet Pro 8720)

Microsoft Device Asssociation Root Enumerator

Microsoft GS Wavetable Synthesis

Microsoft RRAS Root Enumerator

NPIA27BB4 (HP Laserjet 200 colorMFP M275nw)

Speichercontroller
Microsoft-Controller für Speicherplätze
C:\Windows\system32\DRIVERS\spacedump.sys
C:\Windows\system32\DRIVERS\spaceport.sys
Systemgeräte
1 ACIP-Schalter

2 Busenumerator für Verbundgeräte
compositebus.inf_amd64_bcb89b3386563bd7\CompositeB us.sys
3 CPU-zu-EA-Controller

4 DMA-Controller

5 Enumerator für virtuelle NDIS-Nertzwerkadaptor
C:\Windows\system32\drivers\NdisVirtualBus.sys
6 High Definition Audio Controller

C:\Windows\system32\DRIVERS\dmk.sys
C:\Windows\system32\DRIVERS\hdaudbus.sys
C:\Windows\system32\DRIVERS\portcls.sys
7 Hochpräzisionsereigniszeitgeber

8 Legacygerät

9 LPC-Controller
C:\Windows\system32\DRIVERS\msisadrv.sys
10 Microsoft ACPI-Konformers System
C:\Windows\system32\DRIVERS\acpi.sys
11 Microsoft virtueller Datenträgerenumerator
C:\Windows\system32\DRIVERS\vdrvroot.sys
12 Microsoft-Systemverwaltungs-BIOS-Treiber
C:\Windows\system32\DRIVERS\mssmbios.sys
13 Numerischer Coprozessor

14 PCI-Bus
C:\Windows\system32\DRIVERS\pci.sys
15 PCI-zu-PCI-Brücke
C:\Windows\system32\DRIVERS\pci.sys
16 PCI-zu-PCI-Brücke
C:\Windows\system32\DRIVERS\pci.sys
17 PCI-zu-PCI-Brücke
C:\Windows\system32\DRIVERS\pci.sys
18 PnP-Softwaregeräte-Enumerator
swenum.inf_amd64_ea7b19c04e7a8136\swenum.sys
19 Programmierbarer Interruptcontroller

20 Redirector-Bus für Remotedesktop-Geräte
C:\Windows\system32\DRIVERS\rdpbus.sys
21 SM-Bus-Controller

22 Systrem CMOS/Echtzeituhr

23 Systemlautsprecher

24 Systemzeitgeber

25 UMBus-Stamm-Busenumerator
C:\Windows\system32\DRIVERS\umbus.sys
Tastaturen
HID-Tastatur
C:\Windows\system32\DRIVERS\kbdclass.sys
C:\Windows\system32\DRIVERS\kbdhid.sys
Tragbare Geräte
USB_China2
C:\Windows\system32\DRIVERS\UMDF\WpdFs.dll
C:\Windows\system32\drivers\WpdUpFltr.sys
C:\Windows\system32\DRIVERS\WUDFRd.sys
USB-Controller
1 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CB
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
2 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27C9
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
3 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CA
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
4 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27C8
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
C:\Windows\system32\drivers\usbuhci.sys
5 Intel(R) 82801G (ICH7-Familie) USB universeller Hostconroller - 27CC
C:\Windows\system32\drivers\usbehci.sys
C:\Windows\system32\drivers\usbhub.sys
C:\Windows\system32\drivers\usbport.sys
6 USB-Massenspeichergeräte
C:\Windows\system32\drivers\USBSTOR.SYS
7 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
8 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
9 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
10 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
11 USB-Root-Hub
C:\Windows\system32\drivers\usbd.sys
C:\Windows\system32\drivers\usbhub.sys
12 USB-Verbundgeräte
C:\Windows\system32\drivers\usbccgp.sys







120

DocAElstein
02-11-2020, 11:50 PM
In support of this Post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12142&viewfull=1#post12142

_____ Workbook: wbCodesBeforeFromDoubleDriver.xlsm ( Using Excel 2007 32 bit )

Double Driver Backup Non Microsoft



EG41MFT-US2H 09.02.2020 14-24-41



Display



Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1)

restore.ini

oem2.inf

igdlh.cat

igdkmd64.sys

igdumd64.dll

igdumd32.dll

igkrng500.bin

igcompkrng500.bin

igfcg500m.bin

iglhxs64.vp

iglhxo64.vp

iglhxc64.vp

iglhxg64.vp

iglhxa64.vp

iglhxa64.cpa

iglhcp64.dll

iglhcp32.dll

iglhsip64.dll

iglhsip32.dll

igd10umd32.dll

igd10umd64.dll



Printer



HP LaserJet Pro 200 color MFP M275 PCL6 Class Driver

restore.ini

prnhpcl3.inf

prnhpcl3.cat



amd64

hpcP6wn8_CA.GPD

hppcl6_CA-manifest.ini

hpcPCL6_PipelineConfig.xml

hpcCFGP6.GDL

hpcP6wn8_MA.GPD

hppcl6_MA-manifest.ini

hpcP6wn8_CB.GPD

hppcl6_CB-manifest.ini

hpcP6wn8_MB.GPD

hppcl6_MB-manifest.ini

hpcP6wn8_MA_HWCP.GPD

hppcl6_MA_HWCP-manifest.ini

hpcP6wn8_CA_OJEF.GPD

hppcl6_CA_OJEF-manifest.ini

hpcP6wn8_CB_HWCP.GPD

hppcl6_CB_HWCP-manifest.ini

hpcP6wn8_CA_HWCP.GPD

hppcl6_CA_HWCP-manifest.ini

hpc6mw81.gpd

hpcstw81.dll

hpcfltw8.dll

hpcfltwb.dll

hppcl6usbext.js

hppcl6usbext.xml

hppcl6wsdext.xml



Brother Laser Type1 Class Driver

restore.ini

prnbrcl1.inf

PRNBRCL1.CAT

BRIBMF01.GPD

BRIBMF01-PIPELINECONFIG.XML

BRIBMF01-MANIFEST.INI

BRIBMF02.GPD

BRIBMF02-PIPELINECONFIG.XML

BRIBMF02-MANIFEST.INI

BRIBMF03.GPD

BRIBMF03-PIPELINECONFIG.XML

BRIBMF03-MANIFEST.INI

BRIBMF04.GPD

BRIBMF04-PIPELINECONFIG.XML

BRIBMF04-MANIFEST.INI

BRIBMF05.GPD

BRIBMF05-PIPELINECONFIG.XML

BRIBMF05-MANIFEST.INI

BRIBMF05.dpb

BRIBMF06.GPD

BRIBMF06-PIPELINECONFIG.XML

BRIBMF06-MANIFEST.INI

BRIBMF06.dpb

BRIBMF07.GPD

BRIBMF07-PIPELINECONFIG.XML

BRIBMF07-MANIFEST.INI

BRIBMF07.dpb

BRIBMF08.GPD

BRIBMF08-PIPELINECONFIG.XML

BRIBMF08-MANIFEST.INI

BRIBMF08.dpb

BRIBMF0C.GPD

BRIBMF0C-PIPELINECONFIG.XML

BRIBMF0C-MANIFEST.INI

BRIBMF0D.GPD

BRIBMF0D-PIPELINECONFIG.XML

BRIBMF0D-MANIFEST.INI

BRIBMF0E.PPD

BRIBMF0E-PIPELINECONFIG.XML

BRIBMF0E-MANIFEST.INI

BRIBREM00.GPD

BRIBMM0A.GPD

BRIBMM0A-PIPELINECONFIG.XML

BRIBMM0A-MANIFEST.INI

BRIBMM0B.GPD

BRIBMM0B-PIPELINECONFIG.XML

BRIBMM0B-MANIFEST.INI

BRIBMM0C.GPD

BRIBMM0C-PIPELINECONFIG.XML

BRIBMM0C-MANIFEST.INI

BRIBMM0D.GPD

BRIBMM0D-PIPELINECONFIG.XML

BRIBMM0D-MANIFEST.INI

BRIBME0A_200.gpd

BRIBME0A_200-MANIFEST.INI

BRIBME0A_200-PipelineConfig.xml

BRIBME0A_300.gpd

BRIBME0A_300-MANIFEST.INI

BRIBME0A_300-PipelineConfig.xml

BRIBRE01.gpd



amd64

BRIBEN01.DLL

BRIBEN02.DLL

BRIBEN03.DLL

BRIBEN04.DLL

BRIBEN05.DLL

BRIBEN06.DLL

BRIBEN07.DLL

BRIBEN08.DLL

BRIBEN0C.DLL

BRIBFRM00.DLL

BRIBFFM00.DLL

BRIBFPM00.DLL

BRIBFLM00.DLL

BRIBFTM00.DLL

BRIBFCM00.DLL

BRIBREM00.DLL

BRIBMM0A.DLL

BRIBMM0B.DLL

BRIBMM0C.DLL

BRIBFFI01.DLL

BRIBFRA01.DLL

BRIBFPR01.DLL

BRIBFPJ01.DLL

BRIBRE01.dll

BRIBME0A.dll



HP OfficeJet Pro 8720 PCL-3

restore.ini

oem3.inf

hpygid20_v4.cat

hpgid20v4-PipelineConfig.xml

hpgid20v4cfg.gdl

hpgid20v4map.xml

hpgid20v4que.xml

hpgid20v4-constraints.js

hpgid20v4-bidiEvent.xml

hpgid20v4-bidiSPM.xml

hpgid20v4-bidiWSD.xml

hpgid20v4-bidiUSB.js

hpgid20v4help.cab

hp8720.bag

hpygid20_8720-manifest.ini

hpgid20v4-bidiUSB-OPA.xml



amd64

hpbxpsv420.dll

hpygiddrv20.dll

hpUIMDDialog20.dll

hpgid20v4PE.exe

hpygidres20.dll

hpgid20v4_symbols.gpd

userfors.dll

hpgid20v4PELib.dll

hpoj_8720_v4.gpd


Worksheet: DDNonMicrosoftBefore



wbCodesBeforeFromDoubleDriver.xlsm : https://app.box.com/s/c5cxiz6rbv8frupedm26px4k51ybz7n0

DocAElstein
02-12-2020, 12:31 AM
In support of this Post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12142&viewfull=1#post12142







PrintQueue

Local Print Queue
restore.ini
printqueue.inf

USB

Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27C8
restore.ini
usbport.inf
usbehci.sys
usbport.sys
usbohci.sys
usbuhci.sys
usbhub.sys
usbd.sys

Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27C9
restore.ini
usbport.inf
usbehci.sys
usbport.sys
usbohci.sys
usbuhci.sys
usbhub.sys
usbd.sys

Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27CA
restore.ini
usbport.inf
usbehci.sys
usbport.sys
usbohci.sys
usbuhci.sys
usbhub.sys
usbd.sys

Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27CB
restore.ini
usbport.inf
usbehci.sys
usbport.sys
usbohci.sys
usbuhci.sys
usbhub.sys
usbd.sys

Intel(R) 82801G (ICH7 Family) USB2 Enhanced Host Controller - 27CC
restore.ini
usbport.inf
usbehci.sys
usbport.sys
usbohci.sys
usbuhci.sys
usbhub.sys
usbd.sys

USB Root Hub
restore.ini
usbport.inf
usbehci.sys
usbport.sys
usbohci.sys
usbuhci.sys
usbhub.sys
usbd.sys

USB Mass Storage Device
restore.ini
usbstor.inf
usbstor.sys

USB Composite Device
restore.ini
usb.inf
usbccgp.sys

CDROM

CD-ROM Drive
restore.ini
cdrom.inf
cdrom.sys

Computer

ACPI x64-based PC
restore.ini
hal.inf

DiskDrive

Disk drive
restore.ini
disk.inf
disk.sys

Display

Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1)
restore.ini
oem2.inf
igdlh.cat
igdkmd64.sys
igdumd64.dll
igdumd32.dll
igkrng500.bin
igcompkrng500.bin
igfcg500m.bin
iglhxs64.vp
iglhxo64.vp
iglhxc64.vp
iglhxg64.vp
iglhxa64.vp
iglhxa64.cpa
iglhcp64.dll
iglhcp32.dll
iglhsip64.dll
iglhsip32.dll
igd10umd32.dll
igd10umd64.dll

HDC

Intel(R) 82801GB-GR-GH (ICH7 Family) Serial ATA Storage Controller - 27C0
restore.ini
mshdc.inf
storahci.sys
intelide.sys
storprop.dll
atapi.sys
ataport.sys
pciidex.sys
pciide.sys

IDE Channel
restore.ini
mshdc.inf
storahci.sys
intelide.sys
storprop.dll
atapi.sys
ataport.sys
pciidex.sys
pciide.sys

Keyboard

HID Keyboard Device
restore.ini
keyboard.inf
i8042prt.sys
kbdclass.sys
kbdhid.sys

MEDIA

High Definition Audio-Gerät
restore.ini
hdaudio.inf
hdaudio.sys

Microsoft Streaming Clock Proxy
restore.ini
ksfilter.inf

Microsoft Streaming Service Proxy
restore.ini
ksfilter.inf

Microsoft Streaming Quality Manager Proxy
restore.ini
ksfilter.inf

Microsoft Streaming Tee-Sink-to-Sink Converter
restore.ini
ksfilter.inf

Microsoft Trusted Audio Drivers
restore.ini
wdmaudio.inf
portcls.sys
MsApoFxProxy.dll
drmk.sys
drmkaud.sys
sysfxui.dll
wmalfxgfxdsp.dll

Monitor

Generic PnP Monitor
restore.ini
monitor.inf
monitor.sys

Generic Non-PnP Monitor
restore.ini
monitor.inf
monitor.sys

Mouse

HID-compliant mouse
restore.ini
msmouse.inf
mouclass.sys
sermouse.sys
mouhid.sys

Net

Microsoft Kernel Debug Network Adapter
restore.ini
kdnic.inf
kdnic.sys

Realtek PCIe GBE Family Controller
restore.ini
rt640x64.inf
rt640x64.sys

WAN Miniport (SSTP)
restore.ini
netsstpa.inf

WAN Miniport (IKEv2)
restore.ini
netavpna.inf

WAN Miniport (L2TP)
restore.ini
netrasa.inf

WAN Miniport (PPTP)
restore.ini
netrasa.inf

WAN Miniport (PPPOE)
restore.ini
netrasa.inf

WAN Miniport (IP)
restore.ini
netrasa.inf

WAN Miniport (IPv6)
restore.ini
netrasa.inf

WAN Miniport (Network Monitor)
restore.ini
netrasa.inf

Printer

HP LaserJet Pro 200 color MFP M275 PCL6 Class Driver
restore.ini
prnhpcl3.inf
prnhpcl3.cat

amd64
hpcP6wn8_CA.GPD
hppcl6_CA-manifest.ini
hpcPCL6_PipelineConfig.xml
hpcCFGP6.GDL
hpcP6wn8_MA.GPD
hppcl6_MA-manifest.ini
hpcP6wn8_CB.GPD
hppcl6_CB-manifest.ini
hpcP6wn8_MB.GPD
hppcl6_MB-manifest.ini
hpcP6wn8_MA_HWCP.GPD
hppcl6_MA_HWCP-manifest.ini
hpcP6wn8_CA_OJEF.GPD
hppcl6_CA_OJEF-manifest.ini
hpcP6wn8_CB_HWCP.GPD
hppcl6_CB_HWCP-manifest.ini
hpcP6wn8_CA_HWCP.GPD
hppcl6_CA_HWCP-manifest.ini
hpc6mw81.gpd
hpcstw81.dll
hpcfltw8.dll
hpcfltwb.dll
hppcl6usbext.js
hppcl6usbext.xml
hppcl6wsdext.xml

Brother Laser Type1 Class Driver
restore.ini
prnbrcl1.inf
PRNBRCL1.CAT
BRIBMF01.GPD
BRIBMF01-PIPELINECONFIG.XML
BRIBMF01-MANIFEST.INI
BRIBMF02.GPD
BRIBMF02-PIPELINECONFIG.XML
BRIBMF02-MANIFEST.INI
BRIBMF03.GPD
BRIBMF03-PIPELINECONFIG.XML
BRIBMF03-MANIFEST.INI
BRIBMF04.GPD
BRIBMF04-PIPELINECONFIG.XML
BRIBMF04-MANIFEST.INI
BRIBMF05.GPD
BRIBMF05-PIPELINECONFIG.XML
BRIBMF05-MANIFEST.INI
BRIBMF05.dpb
BRIBMF06.GPD
BRIBMF06-PIPELINECONFIG.XML
BRIBMF06-MANIFEST.INI
BRIBMF06.dpb
BRIBMF07.GPD
BRIBMF07-PIPELINECONFIG.XML
BRIBMF07-MANIFEST.INI
BRIBMF07.dpb
BRIBMF08.GPD
BRIBMF08-PIPELINECONFIG.XML
BRIBMF08-MANIFEST.INI
BRIBMF08.dpb
BRIBMF0C.GPD
BRIBMF0C-PIPELINECONFIG.XML
BRIBMF0C-MANIFEST.INI
BRIBMF0D.GPD
BRIBMF0D-PIPELINECONFIG.XML
BRIBMF0D-MANIFEST.INI
BRIBMF0E.PPD
BRIBMF0E-PIPELINECONFIG.XML
BRIBMF0E-MANIFEST.INI
BRIBREM00.GPD
BRIBMM0A.GPD
BRIBMM0A-PIPELINECONFIG.XML
BRIBMM0A-MANIFEST.INI
BRIBMM0B.GPD
BRIBMM0B-PIPELINECONFIG.XML
BRIBMM0B-MANIFEST.INI
BRIBMM0C.GPD
BRIBMM0C-PIPELINECONFIG.XML
BRIBMM0C-MANIFEST.INI
BRIBMM0D.GPD
BRIBMM0D-PIPELINECONFIG.XML
BRIBMM0D-MANIFEST.INI
BRIBME0A_200.gpd
BRIBME0A_200-MANIFEST.INI
BRIBME0A_200-PipelineConfig.xml
BRIBME0A_300.gpd
BRIBME0A_300-MANIFEST.INI
BRIBME0A_300-PipelineConfig.xml
BRIBRE01.gpd

amd64
BRIBEN01.DLL
BRIBEN02.DLL
BRIBEN03.DLL
BRIBEN04.DLL
BRIBEN05.DLL
BRIBEN06.DLL
BRIBEN07.DLL
BRIBEN08.DLL
BRIBEN0C.DLL
BRIBFRM00.DLL
BRIBFFM00.DLL
BRIBFPM00.DLL
BRIBFLM00.DLL
BRIBFTM00.DLL
BRIBFCM00.DLL
BRIBREM00.DLL
BRIBMM0A.DLL
BRIBMM0B.DLL
BRIBMM0C.DLL
BRIBFFI01.DLL
BRIBFRA01.DLL
BRIBFPR01.DLL
BRIBFPJ01.DLL
BRIBRE01.dll
BRIBME0A.dll

HP OfficeJet Pro 8720 PCL-3
restore.ini
oem3.inf
hpygid20_v4.cat
hpgid20v4-PipelineConfig.xml
hpgid20v4cfg.gdl
hpgid20v4map.xml
hpgid20v4que.xml
hpgid20v4-constraints.js
hpgid20v4-bidiEvent.xml
hpgid20v4-bidiSPM.xml
hpgid20v4-bidiWSD.xml
hpgid20v4-bidiUSB.js
hpgid20v4help.cab
hp8720.bag
hpygid20_8720-manifest.ini
hpgid20v4-bidiUSB-OPA.xml

amd64
hpbxpsv420.dll
hpygiddrv20.dll
hpUIMDDialog20.dll
hpgid20v4PE.exe
hpygidres20.dll
hpgid20v4_symbols.gpd
userfors.dll
hpgid20v4PELib.dll
hpoj_8720_v4.gpd

SCSIAdapter

Microsoft Storage Spaces Controller
restore.ini
spaceport.inf
spaceport.sys
spacedump.sys

System

Composite Bus Enumerator
restore.ini
compositebus.inf
CompositeBus.sys

UMBus Root Bus Enumerator
restore.ini
umbus.inf
umbus.sys

NDIS Virtual Network Adapter Enumerator
restore.ini
ndisvirtualbus.inf

Plug and Play Software Device Enumerator
restore.ini
swenum.inf
swenum.sys

Remote Desktop Device Redirector Bus
restore.ini
rdpbus.inf
rdpbus.sys

Microsoft ACPI-Compliant System
restore.ini
acpi.inf
acpi.sys

ACPI Power Button
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

PCI Bus
restore.ini
pci.inf
pci.sys

System board
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

Legacy device
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

ACPI Fixed Feature Button
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

CPU to IO Controller
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

High Definition Audio Controller
restore.ini
hdaudbus.inf
hdaudbus.sys

PCI-to-PCI Bridge
restore.ini
pci.inf
pci.sys

LPC Controller
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

SM Bus Controller
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

Motherboard resources
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

Programmable interrupt controller
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

Direct memory access controller
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

System timer
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

High precision event timer
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

System CMOS-real time clock
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

System speaker
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

Numeric data processor
restore.ini
machine.inf
msisadrv.sys
isapnp.sys

Microsoft Virtual Drive Enumerator
restore.ini
vdrvroot.inf
vdrvroot.sys

Volume Manager
restore.ini
volmgr.inf
volmgr.sys

Microsoft Basic Display Driver
restore.ini
basicdisplay.inf
BasicDisplay.sys

Microsoft Basic Render Driver
restore.ini
basicrender.inf
BasicRender.sys

Microsoft System Management BIOS Driver
restore.ini
mssmbios.inf
mssmbios.sys

Processor

Intel Processor
restore.ini
cpu.inf
processr.sys
intelppm.sys
amdk8.sys
amdppm.sys

VolumeSnapshot

Generic volume shadow copy
restore.ini
volsnap.inf

SoftwareDevice

Generic software device
restore.ini
c_swdevice.inf

1394

Texas Instruments 1394 OHCI Compliant Host Controller
restore.ini
1394.inf
1394ohci.sys

Image

WSD-Scandienst
restore.ini
wsdscdrv.inf
WSDScDrv.dll

Volume

Volume
restore.ini
volume.inf
volume.sys

HIDClass

USB Input Device
restore.ini
input.inf
hidusb.sys
hidclass.sys
hidparse.sys

HID-compliant consumer control device
restore.ini
hidserv.inf

HID-compliant system controller
restore.ini
input.inf
hidusb.sys
hidclass.sys
hidparse.sys

HID-compliant vendor-defined device
restore.ini
input.inf
hidusb.sys
hidclass.sys
hidparse.sys

AudioEndpoint

Audio Endpoint
restore.ini
audioendpoint.inf

WSDPrintDevice

WSD Print Device
restore.ini
wsdprint.inf
wsdprint.sys

WPD

WPD-Dateisystem-Volumetreiber
restore.ini
wpdfs.inf
wpdfs.dll




wbCodesBeforeFromDoubleDriver.xlsm : https://app.box.com/s/c5cxiz6rbv8frupedm26px4k51ybz7n0

DocAElstein
02-16-2020, 06:51 PM
In Support of this Post question
2020-02-15 15:08:06 https://excelribbon.tips.net/T009046_Determining_Differences_Between_Dates.html Karim K.


Determining Differences Between Dates

From Allen Wyatt, here https://excelribbon.tips.net/T009046_Determining_Differences_Between_Dates.html

….. When you are programming Excel macros, you should know that dates are stored internally, within variables, as serial numbers. The serial number represents the number of days elapsed since a starting "base date," specifically since 1 January 100. This means that you can perform math with the serial numbers, if desired. You can, for instance, find the number of days between two dates by simply subtracting the dates from each other.

If you want to get fancier in your date calculations, you can use the DateDiff function. This function allows you, for instance, to determine the number of weeks or months between two dates. In order to use the function to find this type of information, you would do as follows:


iNumWeeks = DateDiff("ww", dFirstDate, dSecondDate)
iNumMonths = DateDiff("m", dFirstDate, dSecondDate)

The first line determines the number of weeks between the two dates, and the second determines the number of months between them.
Remember that the DateDiff function is a macro (VBA) function, not a worksheet function. Excel handles a range of dates in worksheets that begin with January 1, 1900. In VBA, however, dates can begin (as already noted) in the year 100. That means that macros can handle a much larger range of dates, including dates prior to those handled natively by Excel……………..



Example: : User inputs "2/15/2019" in cell (C4) - The next day it shows "1 Day/s" and so on.


The following coding must go in the worksheets code module of the worksheet of interest:
_1 Right Click Tab _2 Select Show Code or _ 3 Double Click on worksheet in VB Editor project Explorer .JPG : https://imgur.com/1xcWkQJ , https://imgur.com/oWS0uZ4
27482749


In first worksheet Code Module

Option Explicit ' https://excelribbon.tips.net/T009046_Determining_Differences_Between_Dates.html ' https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/datediff-function
Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
Dim rngC As Range: Set rngC = Me.Range("C2:C" & (Me.UsedRange.Row + Me.UsedRange.Rows.Count - 1) & "") ' (Bottom left of Usedrange + Row count in UsedRange) - 1 will give us the last row
Dim rngStr As Range
For Each rngStr In rngC
Debug.Print rngStr.Value ' From VB Editor, Hit keys Ctrl + g to see the immediate window
If rngStr <> "" Then
Dim Vl As String: Let Vl = rngStr.Value
If Len(Vl) < 8 Then MsgBox Prompt:=Vl & " is too short for a date": GoTo Nxt
If Len(Vl) - Len(Replace(Vl, "/", "")) <> 2 Then MsgBox Prompt:="Don't have 2 ""/""s in " & Vl: GoTo Nxt
Dim Dey As String, Munf As String, Jear As String
Dim strSplt() As String: Let strSplt() = Split(Vl, "/", 3, vbBinaryCompare) ' https://imgur.com/1xcWkQJ
Let Dey = strSplt(1): Munf = strSplt(0): Jear = strSplt(2)
Dim Dte As Date, strDte As String, LngDte As Long
Let strDte = Format(Dey & " " & Munf & " " & Jear, "dd mmmm yyyy"): Debug.Print strDte
Let Dte = CDate(strDte)
Let strDte = Format(Dey & " " & Munf & " " & Jear, "dd" & ", " & "mmmm" & ", " & "yyyy"): Debug.Print strDte
Let LngDte = CLng(Dte) ' Allen Wyatt: When you are programming Excel macros, you should know that dates are stored internally, within variables, as serial numbers. The serial number represents the number of days elapsed since a starting "base date," specifically since 1 January 100. This means that you can perform math with the serial numbers, if desired. You can, for instance, find the number of days between two dates by simply subtracting the dates from each other.
Dim LngNow As Long: Let LngNow = CLng(Now())
' https://excelribbon.tips.net/T009046_Determining_Differences_Between_Dates.html ' https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/datediff-function
Dim iNumDays As Long, iNumWeeks As Long, iNumMonths As Long
Let iNumDays = DateDiff("d", LngDte, LngNow) ' = LngNow-LngDte
Let iNumWeeks = DateDiff("w", LngDte, LngNow)
Let iNumMonths = DateDiff("m", LngDte, LngNow)
Let Application.EnableEvents = False
Let rngStr.Offset(0, 1).Value = iNumDays & " Days, " & iNumWeeks & " Weeks, and " & iNumMonths & " Months."
Let rngStr.Offset(0, 2).Value = strDte
Let Application.EnableEvents = True
Else ' case empty cell
End If
Nxt: Next rngStr
Else ' No change in column 3 ( "C" )
End If

Me.Columns.AutoFit
End Sub

Note:
You may need to adjust the coding a bit with a +1 or -1 somewhere to get the day count output exactly as you want it


The above macro will start automatically when you add a date into column “C” , provided it has this sort of format
2/15/2020
( Month/Day/Year )


The following additional macro, will ensure that the worksheet is updated when the workbook is opened

Macro in ThisWorkbook code module

Private Sub Workbook_Open()
Call Tabelle1.Worksheet_Change(Worksheets.Item(1).Range ("C2"))
End Sub

The above code module and coding therein can be seen by double clicking on the ThisWorkbook code module in the VB Editor explorer:
Double Click on ThisWorkbook in VB Editor Explorer.jpg : https://imgur.com/Kls33SD
2747

Note, In order to call our macro Public Sub Worksheet_Change(ByVal Target As Range) in this way, we have changed the more typically seen , default option of Private to Public in the first macro in the worksheets code module

Here is a typical output
_____ Workbook: KarimKAllenWyattDateDifferences.xlsm ( Using Excel 2007 32 bit )
Row\Col
B
C
D
E
F

3


42/15/20202 Days, 0 Weeks, and 0 Months.15, Februar, 2020


51/15/202033 Days, 4 Weeks, and 1 Months.15, Januar, 2020


66


73/12/2019342 Days, 48 Weeks, and 11 Months.12, März, 2019


82/16/20201 Days, 0 Weeks, and 0 Months.16, Februar, 2020


9z
Worksheet: Tabelle1



KarimKAllenWyattDateDifferences.xlsm : https://app.box.com/s/ti0n1wj62hcd2qmhcg5kiqle1sya79ux

DocAElstein
02-16-2020, 10:07 PM
In support of this postpost
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page8
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page8#post12252
( see also here : http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12147&viewfull=1#post12147
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12148&viewfull=1#post12148 )



First a "VBA" arrays type macro to count the total number of files with their extensions , then a "spreadsheet" type equivalent extended also to look at the color of the cells

Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("D2:F264")
Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Rem 3 Looping
Dim ClCnt As Long, RwCnt As Long
For RwCnt = 1 To UBound(arrFiles(), 1)
For ClCnt = 1 To UBound(arrFiles(), 2)
If arrFiles(RwCnt, ClCnt) = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Select Case Xtn
Case "sys", "SYS"
Let Sys = Sys + 1
Case "dll"
Let Ddl = Ddl + 1
Case "bin"
Let Bin = Bin + 1
Case "cpa"
Let Cpa = Cpa + 1
Case "vp"
Let Vp = Vp + 1
Case Else
Debug.Print "Case Else " & arrFiles(RwCnt, ClCnt)
Let Els = Els + 1
End Select
Else ' not a file path
End If
End If
Next ClCnt
Next RwCnt
Rem 4 output

Debug.Print "sys " & Sys
Debug.Print "ddl " & Ddl
Debug.Print "bin " & Bin
Debug.Print "cpa " & Cpa
Debug.Print "vp " & Vp
Debug.Print "els " & Els

End Sub


Sub WotsANormalCellColor()
Let Range("A1").Value = "AnyText"
Debug.Print Range("A1").Font.Color & " " & Range("A1").Font.ColorIndex ' we seee that Color for black or automatic is 0 ColorIndex for black is 1 for automatic is -4105
End Sub




' The next code and the one in the next post is the spreadsheet type equivalent extended also to look at the color of the cells
Sub FileTypesHere()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("D2:F264")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long, Els2 As Long
Rem 3 Looping
'Dim ClCnt As Long, RwCnt As Long
Dim RngStr As Range ' a single cell to use as a stear element in the For Next loop
For Each RngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If RngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
'If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If Left(RngStr.Value, 3) = "C:\" And InStr(4, RngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(RngStr.Value, (InStr(4, RngStr.Value, ".", vbBinaryCompare) + 1))
Select Case Xtn
Case "sys", "SYS"
Let Sys = Sys + 1: If RngStr.Font.Color <> 0 Then Let Sys2 = Sys2 + 1
Case "dll"
Let Ddl = Ddl + 1: If RngStr.Font.Color <> 0 Then Let Ddl2 = Ddl2 + 1
Case "bin"
Let Bin = Bin + 1:: If RngStr.Font.Color <> 0 Then Let Bin2 = Bin2 + 1
Case "cpa"
Let Cpa = Cpa + 1: If RngStr.Font.Color <> 0 Then Let Cpa2 = Cpa2 + 1
Case "vp"
Let Vp = Vp + 1: If RngStr.Font.Color <> 0 Then Let Vp2 = Vp2 + 1
Case Else
Debug.Print "Case Else " & RngStr.Value
Let Els = Els + 1: If RngStr.Font.Color <> 0 Then Let Els2 = Els2 + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next RngStr
Rem 4 output

Debug.Print "sys " & Sys & " (" & Sys2 & ")"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ")"
Debug.Print "bin " & Bin & " (" & Bin2 & ")"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ")"
Debug.Print "vp " & Vp & " (" & Vp2 & ")"
Debug.Print "els " & Els & " (" & Els2 & ")"

End Sub

DocAElstein
02-18-2020, 12:27 PM
Some coding in support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page8#post12252
for worksheet "DDAllBefore"


( see also here : http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12147&viewfull=1#post12147
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel?p=12148&viewfull=1#post12148 )


Option Explicit
Sub ColumnsE()
Columns("E:E").SpecialCells(xlCellTypeConstants, xlTextValues + xlNumbers).Copy
Paste Destination:=Range("E680")
End Sub


Sub FileTypesHere()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("F5:G670")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long, Els2 As Long
Dim Inf2 As Long, Ini2 As Long, Cat2 As Long, Gpd2 As Long, Xml2 As Long, Gdl2 As Long
Dim Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Dim Js2 As Long, Dpd2 As Long, Ppd2 As Long, Cab2 As Long, Bag2 As Long, Exe2 As Long
Dim Dpb As Long
Dim Dpb2 As Long
Rem 3 Looping
'Dim ClCnt As Long, RwCnt As Long
Dim RngStr As Range ' a single cell to use as a stear element in the For Next loop
For Each RngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If RngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
'If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
'If Left(RngStr.Value, 3) = "C:\" And InStr(4, RngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, RngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(RngStr.Value, (InStr(2, RngStr.Value, ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1: If RngStr.Font.Color <> 0 Then Let Sys2 = Sys2 + 1
Case "DLL"
Let Ddl = Ddl + 1: If RngStr.Font.Color <> 0 Then Let Ddl2 = Ddl2 + 1
Case "BIN"
Let Bin = Bin + 1: If RngStr.Font.Color <> 0 Then Let Bin2 = Bin2 + 1
Case "CPA"
Let Cpa = Cpa + 1: If RngStr.Font.Color <> 0 Then Let Cpa2 = Cpa2 + 1
Case "VP"
Let Vp = Vp + 1: If RngStr.Font.Color <> 0 Then Let Vp2 = Vp2 + 1
' Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Case "INF"
Let Inf = Inf + 1: If RngStr.Font.Color <> 0 Then Let Inf2 = Inf2 + 1
Case "INI"
Let Ini = Ini + 1: If RngStr.Font.Color <> 0 Then Let Ini2 = Ini2 + 1
Case "CAT"
Let Cat = Cat + 1: If RngStr.Font.Color <> 0 Then Let Cat2 = Cat2 + 1
Case "GPD"
Let Gpd = Gpd + 1: If RngStr.Font.Color <> 0 Then Let Gpd2 = Gpd2 + 1
Case "XML"
Let Xml = Xml + 1: If RngStr.Font.Color <> 0 Then Let Xml2 = Xml2 + 1
Case "GDL"
Let Gdl = Gdl + 1: If RngStr.Font.Color <> 0 Then Let Gdl2 = Gdl2 + 1
' Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Case "JS"
Let Js = Js + 1: If RngStr.Font.Color <> 0 Then Let Js2 = Js2 + 1
Case "DPD"
Let Dpd = Dpd + 1: If RngStr.Font.Color <> 0 Then Let Dpd2 = Dpd2 + 1
Case "PPD"
Let Ppd = Ppd + 1: If RngStr.Font.Color <> 0 Then Let Ppd2 = Ppd2 + 1
Case "CAB"
Let Cab = Cab + 1: If RngStr.Font.Color <> 0 Then Let Cab2 = Cab2 + 1
Case "BAG"
Let Bag = Bag + 1: If RngStr.Font.Color <> 0 Then Let Bag2 = Bag2 + 1
Case "EXE"
Let Exe = Exe + 1: If RngStr.Font.Color <> 0 Then Let Exe2 = Exe2 + 1
' DPB
Case "DPB"
Let Dpb = Dpb + 1: If RngStr.Font.Color <> 0 Then Let Dpb2 = Dpb2 + 1


Case Else
Debug.Print "Case Else " & RngStr.Value
Let Els = Els + 1:: If RngStr.Font.Color <> 0 Then Let Els2 = Els2 + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next RngStr
Rem 4 output

Debug.Print "sys " & Sys & " (" & Sys2 & ")"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ")"
Debug.Print "bin " & Bin & " (" & Bin2 & ")"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ")"
Debug.Print "vp " & Vp & " (" & Vp2 & ")"
Debug.Print "els " & Els & " (" & Els2 & ")"
' Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Debug.Print "inf " & Inf & " (" & Inf2 & ")"
Debug.Print "ini " & Ini & " (" & Ini2 & ")"
Debug.Print "cat " & Cat & " (" & Cat2 & ")"
Debug.Print "gpd " & Gpd & " (" & Gpd2 & ")"
Debug.Print "xml " & Xml & " (" & Xml2 & ")"
Debug.Print "gdl " & Gdl & " (" & Gdl2 & ")"
' Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Debug.Print "js " & Js & " (" & Js2 & ")"
Debug.Print "dpd " & Dpd & " (" & Dpd2 & ")"
Debug.Print "cab " & Cab & " (" & Cab2 & ")"
Debug.Print "bag " & Bag & " (" & Bag2 & ")"
Debug.Print "ppd " & Ppd & " (" & Ppd & ")"
Debug.Print "exe " & Exe & " (" & Exe2 & ")"
' DPB
Debug.Print "dpb " & Dpb & " (" & Dpb2 & ")"
End Sub

DocAElstein
02-18-2020, 08:08 PM
Some additional coding to help in this Post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page9post12255

(VBA "arrays" version)

Option Explicit
Private Sub FileTypesHereArrays()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("D4:E75")
Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long, Inf As Long, Pnf As Long, Gpd As Long, Exe As Long
Rem 3 Looping
Dim ClCnt As Long, RwCnt As Long
For RwCnt = 1 To UBound(arrFiles(), 1)
For ClCnt = 1 To UBound(arrFiles(), 2)
If arrFiles(RwCnt, ClCnt) = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
' If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1
Case "DLL"
Let Ddl = Ddl + 1
Case "BIN"
Let Bin = Bin + 1
Case "CPA"
Let Cpa = Cpa + 1
Case "VP"
Let Vp = Vp + 1
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Case "BAG"
Let Bag = Bag + 1
Case "XML"
Let Xml = Xml + 1
Case "JS"
Let Js = Js + 1
Case "GDL"
Let Gdl = Gdl + 1
Case "CAB"
Let Cab = Cab + 1
Case "INI"
Let Ini = Ini + 1
Case "CAT"
Let Cat = Cat + 1
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Case "INF"
Let Inf = Inf + 1
Case "PNF"
Let Pnf = Pnf + 1
Case "GPD"
Let Gpd = Gpd + 1
Case "EXE"
Let Exe = Exe + 1
Case Else
Debug.Print "Case Else " & arrFiles(RwCnt, ClCnt)
Let Els = Els + 1
End Select
Else ' not a file path
End If
End If
Next ClCnt
Next RwCnt
Rem 4 output
Debug.Print "sys " & Sys
Debug.Print "dll " & Ddl
Debug.Print "bin " & Bin
Debug.Print "cpa " & Cpa
Debug.Print "vp " & Vp
Debug.Print "els " & Els
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Debug.Print "bag " & Bag
Debug.Print "xml " & Xml
Debug.Print "js " & Js
Debug.Print "gdl " & Gdl
Debug.Print "cab " & Cab
Debug.Print "ini " & Ini
Debug.Print "cat " & Cat
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Debug.Print "inf " & Inf
Debug.Print "pnf " & Pnf
Debug.Print "gpd " & Gpd
Debug.Print "exe " & Exe
Debug.Print "Total is " & Sys + Ddl + Bin + Cpa + Vp + Bag + Xml + Js + Gdl + Cab + Ini + Cat + Inf + Pnf + Gpd + Exe
End Sub

DocAElstein
02-18-2020, 09:12 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page9post12255



'
Sub CompareDriverFilesCommandInDeviceManager() ' InDoubleDriverAllList()
Rem 0
If ActiveSheet.Name <> "PowerShell" Then
MsgBox prompt:="Oops": Exit Sub
Else
End If
Rem 1 Worksheets info
Dim WsDMP As Worksheet, WsCmd As Worksheet
Set WsDMP = Worksheets("DeviceManagerProperties"): Set WsCmd = Worksheets("PowerShell")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range
Dim CelVl As String: Let CelVl = SrchForCel.Value
'If CelVl <> "" And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If CelVl <> "" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file and not a Folder name with a . in it
If Len(CelVl) > (InStr(4, CelVl, ".", vbBinaryCompare) + 3) Then
' case a lot of characters after the . so we probably have a Folder name
Else
Dim FileNmeSrchFor As String
Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\")
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=DeviceManagerProperties!D2:DeviceManagerPropertie s!F265") '
Dim FndCel As Range
Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=DeviceManagerProperties!D2"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
Rem 4 we have two matching cells
'Debug.Print FndCel.Value
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsCmd.Activate: SrchForCel.Select
'Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx
WsDMP.Activate: FndCel.Select
'Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Else ' No match was found - the thing in the cell in
End If
End If ' end of check that the string with a . in it was a file
Else ' case no file string in cell
End If
Next SrchForCel
End Sub

DocAElstein
02-18-2020, 10:52 PM
Some additional coding to help in this Post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page9post12255

("spreadsheet interaction" version)




Private Sub FileTypesHereSpreadsheetInteraction()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("D4:E75")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long
Dim Cat As Long, Inf As Long, Pnf As Long, Gpd As Long, Exe As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long
Dim Bag2 As Long, Xml2 As Long, Js2 As Long, Gdl2 As Long, Cab2 As Long, Ini2 As Long
Dim Cat2 As Long, Inf2 As Long, Pnf2 As Long, Gpd2 As Long, Exe2 As Long
Rem 3 Looping
Dim ClCnt As Long, RwCnt As Long
Dim rngStr As Range
For Each rngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If rngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
' If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
'If InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, rngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(rngStr.Value, (InStr(2, rngStr.Value, ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1: If rngStr.Font.Color <> 0 Then Let Sys2 = Sys2 + 1
Case "DLL"
Let Ddl = Ddl + 1: If rngStr.Font.Color <> 0 Then Let Ddl2 = Ddl2 + 1
Case "BIN"
Let Bin = Bin + 1: If rngStr.Font.Color <> 0 Then Let Bin2 = Bin2 + 1
Case "CPA"
Let Cpa = Cpa + 1: If rngStr.Font.Color <> 0 Then Let Cpa2 = Cpa2 + 1
Case "VP"
Let Vp = Vp + 1: If rngStr.Font.Color <> 0 Then Let Vp2 = Vp2 + 1
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Case "BAG"
Let Bag = Bag + 1: If rngStr.Font.Color <> 0 Then Let Bag2 = Bag2 + 1
Case "XML"
Let Xml = Xml + 1: If rngStr.Font.Color <> 0 Then Let Xml2 = Xml2 + 1
Case "JS"
Let Js = Js + 1: If rngStr.Font.Color <> 0 Then Let Js2 = Js2 + 1
Case "GDL"
Let Gdl = Gdl + 1: If rngStr.Font.Color <> 0 Then Let Gdl2 = Gdl2 + 1
Case "CAB"
Let Cab = Cab + 1: If rngStr.Font.Color <> 0 Then Let Cab2 = Cab2 + 1
Case "INI"
Let Ini = Ini + 1: If rngStr.Font.Color <> 0 Then Let Ini2 = Ini2 + 1
Case "CAT"
Let Cat = Cat + 1: If rngStr.Font.Color <> 0 Then Let Cat2 = Cat2 + 1
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Case "INF"
Let Inf = Inf + 1: If rngStr.Font.Color <> 0 Then Let Inf2 = Inf2 + 1
Case "PNF"
Let Pnf = Pnf + 1: If rngStr.Font.Color <> 0 Then Let Pnf2 = Pnf2 + 1
Case "GPD"
Let Gpd = Gpd + 1: If rngStr.Font.Color <> 0 Then Let Gpd2 = Gpd2 + 1
Case "EXE"
Let Exe = Exe + 1: If rngStr.Font.Color <> 0 Then Let Exe2 = Exe2 + 1
Case Else
Debug.Print "Case Else " & rngStr.Value ' arrFiles(RwCnt, ClCnt)
Let Els = Els + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next rngStr
Rem 4 output
Debug.Print "sys " & Sys & " (" & Sys2 & ")"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ")"
Debug.Print "bin " & Bin & " (" & Bin2 & ")"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ")"
Debug.Print "vp " & Vp & " (" & Vp2 & ")"
Debug.Print "els " & Els
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Debug.Print "bag " & Bag & " (" & Bag2 & ")"
Debug.Print "xml " & Xml & " (" & Xml2 & ")"
Debug.Print "js " & Js & " (" & Js2 & ")"
Debug.Print "gdl " & Gdl & " (" & Gdl2 & ")"
Debug.Print "cab " & Cab & " (" & Cab2 & ")"
Debug.Print "ini " & Ini & " (" & Ini2 & ")"
Debug.Print "cat " & Cat & " (" & Cat2 & ")"
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Debug.Print "inf " & Inf & " (" & Inf2 & ")"
Debug.Print "pnf " & Pnf & " (" & Pnf2 & ")"
Debug.Print "gpd " & Gpd & " (" & Gpd2 & ")"
Debug.Print "exe " & Exe & " (" & Exe2 & ")"
Debug.Print "Total is " & Sys + Ddl + Bin + Cpa + Vp + Bag + Xml + Js + Gdl + Cab + Ini + Cat + Inf + Pnf + Gpd + Exe
End Sub

DocAElstein
02-19-2020, 03:18 AM
In support of this Post

http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page9#post12263


Macro to colour match file entries in the two worksheets,
PowerShell
and
DDAllBefore



Option Explicit
Sub CompareDriverFilesCommandInDoubleDriver() ' DeviceManager() ' InDoubleDriverAllList()
Rem 0
If ActiveSheet.Name <> "PowerShell" Then
MsgBox prompt:="Oops": Exit Sub
Else
End If
Rem 1 Worksheets info
Dim WsDD As Worksheet, WsCmd As Worksheet
Set WsDD = Worksheets("DDAllBefore"): Set WsCmd = Worksheets("PowerShell")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range
Dim CelVl As String: Let CelVl = SrchForCel.Value
'If CelVl <> "" And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If CelVl <> "" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file and not a Folder name with a . in it
If Len(CelVl) > (InStr(4, CelVl, ".", vbBinaryCompare) + 3) Then
' case a lot of characters after the . so we probably have a Folder name
Else
Dim FileNmeSrchFor As String
Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\")
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=DDAllBefore!D5:DDAllBefore!G670") '
Dim FndCel As Range
Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=DDAllBefore!D5"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
Rem 4 we have two matching cells
'Debug.Print FndCel.Value
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsCmd.Activate: SrchForCel.Select
'Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx
WsDD.Activate: FndCel.Select
'Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Else ' No match was found - the thing in the cell in
End If
End If ' end of check that the string with a . in it was a file
Else ' case no file string in cell
End If
Next SrchForCel
End Sub

DocAElstein
02-19-2020, 02:03 PM
' In support of this excelfox post : http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page10#post12271
' File to list all file types , and (those also appearing in DoubleDriver worksheet, ( Worksheets "DDAllBefore" ) )





' In support of this excelfox post : http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page10#post12271
' File to list all file types , and (those also appearing in DoubleDriver worksheet, ( Worksheets "DDAllBefore" ) )
Private Sub FileTypesHereAndAlsoInDoubleDriver()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Worksheets("PowerShell") ' Me
Dim Rng As Range: Set Rng = Ws.Range("D4:E75")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long
Dim Cat As Long, Inf As Long, Pnf As Long, Gpd As Long, Exe As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long
Dim Bag2 As Long, Xml2 As Long, Js2 As Long, Gdl2 As Long, Cab2 As Long, Ini2 As Long
Dim Cat2 As Long, Inf2 As Long, Pnf2 As Long, Gpd2 As Long, Exe2 As Long
Rem 3 Looping
Dim ClCnt As Long, RwCnt As Long
Dim rngStr As Range
For Each rngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If rngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
' If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
'If InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, rngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(rngStr.Value, (InStr(2, rngStr.Value, ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1: If rngStr.Font.Color <> 0 Then Let Sys2 = Sys2 + 1
Case "DLL"
Let Ddl = Ddl + 1: If rngStr.Font.Color <> 0 Then Let Ddl2 = Ddl2 + 1
Case "BIN"
Let Bin = Bin + 1: If rngStr.Font.Color <> 0 Then Let Bin2 = Bin2 + 1
Case "CPA"
Let Cpa = Cpa + 1: If rngStr.Font.Color <> 0 Then Let Cpa2 = Cpa2 + 1
Case "VP"
Let Vp = Vp + 1: If rngStr.Font.Color <> 0 Then Let Vp2 = Vp2 + 1
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Case "BAG"
Let Bag = Bag + 1: If rngStr.Font.Color <> 0 Then Let Bag2 = Bag2 + 1
Case "XML"
Let Xml = Xml + 1: If rngStr.Font.Color <> 0 Then Let Xml2 = Xml2 + 1
Case "JS"
Let Js = Js + 1: If rngStr.Font.Color <> 0 Then Let Js2 = Js2 + 1
Case "GDL"
Let Gdl = Gdl + 1: If rngStr.Font.Color <> 0 Then Let Gdl2 = Gdl2 + 1
Case "CAB"
Let Cab = Cab + 1: If rngStr.Font.Color <> 0 Then Let Cab2 = Cab2 + 1
Case "INI"
Let Ini = Ini + 1: If rngStr.Font.Color <> 0 Then Let Ini2 = Ini2 + 1
Case "CAT"
Let Cat = Cat + 1: If rngStr.Font.Color <> 0 Then Let Cat2 = Cat2 + 1
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Case "INF"
Let Inf = Inf + 1: If rngStr.Font.Color <> 0 Then Let Inf2 = Inf2 + 1
Case "PNF"
Let Pnf = Pnf + 1: If rngStr.Font.Color <> 0 Then Let Pnf2 = Pnf2 + 1
Case "GPD"
Let Gpd = Gpd + 1: If rngStr.Font.Color <> 0 Then Let Gpd2 = Gpd2 + 1
Case "EXE"
Let Exe = Exe + 1: If rngStr.Font.Color <> 0 Then Let Exe2 = Exe2 + 1
Case Else
Debug.Print "Case Else " & rngStr.Value ' arrFiles(RwCnt, ClCnt)
Let Els = Els + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next rngStr
Rem 4 output
Debug.Print "sys " & Sys & " (" & Sys2 & ")"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ")"
Debug.Print "bin " & Bin & " (" & Bin2 & ")"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ")"
Debug.Print "vp " & Vp & " (" & Vp2 & ")"
Debug.Print "els " & Els
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Debug.Print "bag " & Bag & " (" & Bag2 & ")"
Debug.Print "xml " & Xml & " (" & Xml2 & ")"
Debug.Print "js " & Js & " (" & Js2 & ")"
Debug.Print "gdl " & Gdl & " (" & Gdl2 & ")"
Debug.Print "cab " & Cab & " (" & Cab2 & ")"
Debug.Print "ini " & Ini & " (" & Ini2 & ")"
Debug.Print "cat " & Cat & " (" & Cat2 & ")"
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Debug.Print "inf " & Inf & " (" & Inf2 & ")"
Debug.Print "pnf " & Pnf & " (" & Pnf2 & ")"
Debug.Print "gpd " & Gpd & " (" & Gpd2 & ")"
Debug.Print "exe " & Exe & " (" & Exe2 & ")"
Debug.Print "Total is " & Sys + Ddl + Bin + Cpa + Vp + Bag + Xml + Js + Gdl + Cab + Ini + Cat + Inf + Pnf + Gpd + Exe
End Sub

DocAElstein
02-20-2020, 10:10 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page11#post12276


Option Explicit
Private Sub FileTypesHereArrays()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("D4:E180")
Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long
Dim Cat As Long, Inf As Long, Pnf As Long, Gpd As Long, Exe As Long
Dim Sam As Long
Rem 3 Looping
Dim ClCnt As Long, RwCnt As Long
For RwCnt = 1 To UBound(arrFiles(), 1)
For ClCnt = 1 To UBound(arrFiles(), 2)
If arrFiles(RwCnt, ClCnt) = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
' If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
Dim Xtn As String: Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1)) ' this will give the text starting from after the first dot .
' this next section catches single . things
If Len(arrFiles(RwCnt, ClCnt)) - Len(Replace(arrFiles(RwCnt, ClCnt), ".", "")) = 1 Then ' case a single .
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1
Case "DLL"
Let Ddl = Ddl + 1
Case "BIN"
Let Bin = Bin + 1
Case "CPA"
Let Cpa = Cpa + 1
Case "VP"
Let Vp = Vp + 1
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Case "BAG"
Let Bag = Bag + 1
Case "XML"
Let Xml = Xml + 1
Case "JS"
Let Js = Js + 1
Case "GDL"
Let Gdl = Gdl + 1
Case "CAB"
Let Cab = Cab + 1
Case "INI"
Let Ini = Ini + 1
Case "CAT"
Let Cat = Cat + 1
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Case "INF"
Let Inf = Inf + 1
Case "PNF"
Let Pnf = Pnf + 1
Case "GPD"
Let Gpd = Gpd + 1
Case "EXE"
Let Exe = Exe + 1
' sam
Case "SAM"
Let Sam = Sam + 1
Case Else
Debug.Print "Case Else for single "" . "" " & arrFiles(RwCnt, ClCnt)
Let Els = Els + 1
End Select
ElseIf Len(arrFiles(RwCnt, ClCnt)) - Len(Replace(arrFiles(RwCnt, ClCnt), ".", "")) = 2 Then ' a thing like hidscanner.dll.mui or sdstor.sys.mui
' this next section catches double . . things
Dim DllMui As Long, SysMui As Long, Els2 As Long
Select Case UCase(Xtn)
Case "DLL.MUI"
Let DllMui = DllMui + 1
Case "SYS.MUI"
Let SysMui = SysMui + 1
Case Else
Debug.Print "Case Else for double "" . . "" " & arrFiles(RwCnt, ClCnt)
Let Els2 = Els2 + 1
End Select
ElseIf Len(arrFiles(RwCnt, ClCnt)) - Len(Replace(arrFiles(RwCnt, ClCnt), ".", "")) > 2 Then
' this section catches strings with dots more than 2
Dim LtsDts As Long
Debug.Print "More than 2 dots -- " & arrFiles(RwCnt, ClCnt)
Let LtsDts = LtsDts + 1
End If
Else ' not a file, ( well no . in it anyway )
Dim Fldr As Long
Debug.Print "Folder? " & arrFiles(RwCnt, ClCnt)
Let Fldr = Fldr + 1
End If
End If
Next ClCnt
Next RwCnt
Rem 4 output
Debug.Print "sys " & Sys
Debug.Print "dll " & Ddl
Debug.Print "bin " & Bin
Debug.Print "cpa " & Cpa
Debug.Print "vp " & Vp
Debug.Print "Else1 " & Els
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Debug.Print "bag " & Bag
Debug.Print "xml " & Xml
Debug.Print "js " & Js
Debug.Print "gdl " & Gdl
Debug.Print "cab " & Cab
Debug.Print "ini " & Ini
Debug.Print "cat " & Cat
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Debug.Print "inf " & Inf
Debug.Print "pnf " & Pnf
Debug.Print "gpd " & Gpd
Debug.Print "exe " & Exe
' sam
Debug.Print "sam " & Sam
' Dim DllMui As Long, SysMui As Long, Els2 As Long
Debug.Print "dll.mui " & DllMui
Debug.Print "sys.mui " & SysMui
Debug.Print "Else2 " & Els2
Debug.Print "Total files is " & Els + Sys + Ddl + Bin + Cpa + Vp + Bag + Xml + Js + Gdl + Cab + Ini + Cat + Inf + Pnf + Gpd + Exe + Els2 + DllMui + SysMui + Sam
Debug.Print "Total Folders is " & Fldr
Debug.Print "Total things with more than 2 dots is " & LtsDts
End Sub

DocAElstein
02-23-2020, 11:03 PM
In support of this post:
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page14#post12319



Sub FileTypesHereInDeviceManagerProperties()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("D2:F264")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long, Els2 As Long
Rem 3 Looping
'Dim ClCnt As Long, RwCnt As Long
Dim rngStr As Range ' a single cell to use as a stear element in the For Next loop
For Each rngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If rngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
'If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If Left(rngStr.Value, 3) = "C:\" And InStr(4, rngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(rngStr.Value, (InStr(4, rngStr.Value, ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1: If rngStr.Font.Color <> 0 Then Let Sys2 = Sys2 + 1
Case "DLL"
Let Ddl = Ddl + 1: If rngStr.Font.Color <> 0 Then Let Ddl2 = Ddl2 + 1
Case "BIN"
Let Bin = Bin + 1: If rngStr.Font.Color <> 0 Then Let Bin2 = Bin2 + 1
Case "CPA"
Let Cpa = Cpa + 1: If rngStr.Font.Color <> 0 Then Let Cpa2 = Cpa2 + 1
Case "VP"
Let Vp = Vp + 1: If rngStr.Font.Color <> 0 Then Let Vp2 = Vp2 + 1
Case Else
Debug.Print "Case Else " & rngStr.Value
Let Els = Els + 1: If rngStr.Font.Color <> 0 Then Let Els2 = Els2 + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next rngStr
Rem 4 output

Debug.Print "sys " & Sys & " (" & Sys2 & ")"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ")"
Debug.Print "bin " & Bin & " (" & Bin2 & ")"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ")"
Debug.Print "vp " & Vp & " (" & Vp2 & ")"
Debug.Print "els " & Els & " (" & Els2 & ")"

End Sub

DocAElstein
02-24-2020, 02:42 AM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page14#post12323







'====================================
' Dec 2017 For Python Comparison. Tutorial Post: excelforum: https://www.excelforum.com/tips-and-tutorials/1213798-all-sub-folder-and-file-list-from-vba-recursion-routine-explanation-and-method-comparison.html Tutorial Post: ExcelFox: http://www.excelfox.com/forum/showthread.php/1324-Loop-Through-Files-In-A-Folder-Using-VBA?p=10420#post10420
'http://excelpoweruser.blogspot.de/2012/04/looping-through-folders-and-files-in.html http://www.excelforum.com/excel-programming-vba-macros/1126751-get-value-function-loop-through-all-files-in-folder-and-its-subfolders.html#post4316662 http://www.excelfox.com/forum/f5/loop-through-files-in-a-folder-using-vba-1324/
Sub VBADoStuffInFoldersInFolderRecursion() 'Main routine to "Call" the first copy of the second routine, VBALoopThroughEachFolderAndItsFile(
Rem 1A) Some Worksheets and General Variables Info
Dim Ws As Worksheet '_-Dim: Prepares "Pointer" to a "Blue Print" (or Form, Questionaire not yet filled in, a template etc.)"Pigeon Hole" in Memory, sufficient in construction to house a piece of Paper with code text giving the relevant information for the particular Variable Type. VBA is sent to it when it passes it. In a Routine it may be given a particular “Value”, or (“Values” for Objects). There instructions say then how to do that and handle(store) that(those). At Dim the created Paper is like a Blue Print that has some empty spaces not yet filled in. A String is a a bit tricky. The Blue Print code line Paper in the Pigeon Hole will allow to note the string Length and an Initial start memory Location. This Location well have to change frequently as strings of different length are assigned. Instructiions will tell how to do this. Theoretically a specilal value vbNullString is set to aid in quich checks.. But..http://www.mrexcel.com/forum/excel-questions/361246-vbnullstring-2.html#post4411
Set Ws = ActiveSheet ' ThisWorkbook.Worksheets.Item(1) 'Worksheets("EFFldr") 'CHANGE TO SUIT YOUR WORKSHEET '_- Set: Fill or partially Fill: Setting to a Class will involve the use of an extra New at this code line. I will then have an Object referred to as an instance of a Class. At this point I include information on my Pointer Pigeon hole for a distinct distinguishable usage of an Object of the Class. For the case of something such as a Workbook this instancing has already been done, and in addition some values are filled in specific memory locations which are also held as part of the information in the Pigeon Hole Pointer. We will have a different Pointer for each instance. In most excel versions we already have a few instances of Worksheets. Such instances Objects can be further used., - For this a Dim to the class will be necessary, but the New must be omitted at Set. I can assign as many variables that I wish to the same existing instance
Ws.Range("B3:F30").ClearContents ' This line only needed for demo code
Dim celTL As Range: Set celTL = Ws.Range("B3") 'Top left of where Listing should go
Rem 2A) Get Folder Info
Dim strWB As String ' "Pointer" to a "Blue Print" (or Form, Questionaire not yet filled in, a template etc.)"Pigeon Hole" in Memory, sufficient in construction to house a piece of Paper with code text giving the relevant information for the particular Variable Type. VBA is sent to it when it passes it. In a Routine it may be given a particular “Value”, or (“Values” for Objects). There instructions say then how to do that and handle(store) that(those). At Dim the created Paper is like a Blue Print that has some empty spaces not yet filled in. A String is a a bit tricky. The Blue Print code line Paper in the Pigeon Hole will allow to note the string Length and an Initial start memory Location. This Location well have to change frequently as strings of different length are assigned. Instructiions will tell how to do this. Theoretically a specilal value vbNullString is set to aid in quich checks.. But..http://www.mrexcel.com/forum/excel-questions/361246-vbnullstring-2.html#post44116
Let strWB = ThisWorkbook.Path & "\" & "DriverStore" ' "Double Driver Backup All" ' "Double Driver Backup Non Microsoft" ' "PowerShell driverbackup" ' "driverbackup" ' "Before" ' 'CHANGE TO SUIT if you store the main Folder to be looked through somewhere other than in the same Folder as this workbook in which the codes are in
Rem 3A ) ' FileSystemObject Object
Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject") 'Late Binding
'Dim FSO As Scripting.FileSystemObject 'Early Binding alternative activate a reference to the Microsoft Scripting Runtime Library ( MSRL ) in the Tools References menu of VB Editor Options.
'Set FSO = New Scripting.FileSystemObject 'Create an Instance of the Class Scripting FileSystemObject
Dim myFolder As Object 'An Object from myFolder, can be an declared as Dim myFolder As Folder also for Early Binding
Set myFolder = FSO.GetFolder(strWB) 'Set the selected Folder to the Object Folder using this Method which takes as arbument the Full String Path
Rem 4A )
Dim rCnt As Long: Let rCnt = 1: Dim CopyNumber1 As Long: Let CopyNumber1 = 1 '"Run progressin ( "down vertical" ) axis ( Row count for output ), "Down Folder chain to the right", The Count of the Copy of the called Procedue, here set to 1 for the first called copy of the second routine, which is done from this Sub( ) . Any subsequent calls of further second routine copies will be made by the current copy as it "freezes" and sets of that next copy
celTL.Value = myFolder.Path: celTL.Offset(0, 1).Value = myFolder.Name: Ws.Columns("A:C").AutoFit 'First output Row
'( -- Rem 5A) )
Call LoopThroughEachFolderAndItsFile(myFolder, celTL, rCnt, CopyNumber1) 'Up until now we just got the initial Folder. Now we go to all sub folders then all subfolders then all subfolders.......
' let Application.ScreenUpdating = True ' If this had been set to False earlier towards the start, as is often done, then the code might run a bit quicker by virtue of not updating the worksheet everytime an entry is made, but it is not really nacerssary unless the number of Files and Folders is massive. Even then it is probably better not to do that so that in the case of an error one has an additional way in the worksheet to see where the code stopped / errored
MsgBox "All Excel Files processed", vbInformation
Ws.Columns("A:H").AutoFit
End Sub
'Rem 5A) --
Sub VBALoopThroughEachFolderAndItsFile(ByVal fldFldr As Object, ByRef celTL As Range, ByRef rCnt As Long, ByVal CopyNumberFroNxtLvl As Long) 'In below function we have a nested loop to iterate each files also
Dim myFldrs As Object ''This is used continuously as the "steering" thing, that is to say each Sub Folder in Folder loops, in loops, in loops......etc ....can be Dim myFldrs As Folder for early bindingDim CopyNumber As Long 'equivalent to clmLvl in Rudis Q code
Dim CopyNumber As Long 'equivalent to clmLvl in Rudis Q code
Let CopyNumber = CopyNumberFroNxtLvl 'This variable is local to the current running or paused copy of this routine.
'5Ab) Doing stuff for current Folder
For Each myFldrs In fldFldr.SubFolders 'SubFolders collection used to get at all Sub Folders
''''''''Doing stuff for each Folder, .. in this example giving '_-
'_- its full path including name : and just Flder Name ' -- *
Let rCnt = rCnt + 1 + 1 ''At each folder we always move down a line, and a dd amm extra line as a space between Folders ( The indication of the "column" or "down" to the right comes from the Copy Number of the Sub Procedure
Let celTL.Cells(rCnt, 1).Value = myFldrs.Path: celTL.Cells(rCnt, CopyNumber).Offset(0, 2).Value = myFldrs.Name ' -- * 'Print out current Folder Path and Name in next free row.
''''''''End doing stuff for each Folder
'5Ac) Doing stuff for current file.
Dim oFile As Object ' ... for early binding can Dim oFile As file
For Each oFile In myFldrs.Files 'Looking at all Files types initially '#####
''''''''Doing Stuff for Each File
' Dim Extension As String: Let Extension = Right(oFile.Name, (Len(oFile.Name) - (InStrRev(oFile.Name, ".")))) 'To get the bit just after the . dot. #####
' If Left(Extension, 3) = "xls" Then 'Check for your required File Type #####
Let rCnt = rCnt + 1
celTL.Cells(rCnt, CopyNumber).Offset(0, 2).Value = oFile.Name ' Do your stuff here
' Dim wkb As Workbook
On Error GoTo ErrHdlr 'In case problem opening file for example
' Set wkb = Workbooks.Open(oFile)
' wkb.Close SaveChanges:=True
' Else 'Do not do stuff for a Bad Extension ' #####
' End If ' #####
''''''''End Doing Sttuff for Each File
NxtoFile: Next oFile ' Spring Point after error handler so as to go on to next File after the File action that errored
Call LoopThroughEachFolderAndItsFile(myFldrs, celTL, rCnt, CopyNumber + 1) 'This is an example of recursion. It is actually very simple once you understand it. But it is just incredibly difficult to put in words. It is basically a Procedure that keeps calling itself as much as necessary as it goes "along", "down", or "to the right" of the Path "roots". Every time it goes off calling itself VBA runs a copy of that Procedure. It "Stacks" all info carefully for each "Copy" Run and continues to do this "drilling" down as far as it must, in this case finding the Next Folder, and then the next Folder in that, then the next Folder in that, then the next Folder in that...I think you get the point! Each time VBA makes a copy of the Routine and you go into that. The calling Routine then "freezes at its current state and all variable keep there values. The "Frozen" Routine then re starts when the copy finishes
Next
Exit Sub 'Normal End for no Errors
Rem 6 ) Error handler section just put here for convenience
ErrHdlr: 'Hopefully we know why we are here, and after informing can continue ( to next file )
MsgBox prompt:="Error " & Err.Description & " with File " & oFile & ""
On Error GoTo -1 'This needs to be done to reset the VBA exceptional error state of being. Otherwise VBA "thinks" Errors are being handeled and will not respond again to the Error handler.
On Error GoTo 0 ' Swiches off the current error handler. I do not really need to do this. But it is good practice so the error handler is only in place at the point where i next am expecting an error
GoTo NxtoFile
End Sub

DocAElstein
02-25-2020, 04:45 PM
in support of this Thread post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page14#post12323





Option Explicit
Private Sub FileTypesHereArrays()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("A1:F4437")
Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long
Dim Cat As Long, Inf As Long, Pnf As Long, Gpd As Long, Exe As Long
Dim Sam As Long
Dim Inf_loc As Long, Hlp As Long, Ntf As Long, Ppd As Long, Tbl As Long, Icc As Long, Dat As Long
Dim Dpb As Long, Cty As Long, Msc As Long, Xst As Long
Rem 3 Looping
Dim ClCnt As Long, RwCnt As Long
For RwCnt = 1 To UBound(arrFiles(), 1)
For ClCnt = 1 To UBound(arrFiles(), 2)
If ClCnt = 2 And arrFiles(RwCnt, ClCnt) <> "" Then ' case of folder path
Dim Fldr As Long ' Debug.Print "Folder? " & arrFiles(RwCnt, ClCnt)
Let Fldr = Fldr + 1
Let RwCnt = RwCnt + 1 ' this is naughty, but will stop us hitting the folder name as the columns increase
Else ' not a folder and if empty then not in column 2
If arrFiles(RwCnt, ClCnt) = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
' If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
Dim Xtn As String: Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(2, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1)) ' this will give the text starting from after the first dot .
' this next section catches single . things
If Len(arrFiles(RwCnt, ClCnt)) - Len(Replace(arrFiles(RwCnt, ClCnt), ".", "")) = 1 Then ' case a single .
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1
Case "DLL"
Let Ddl = Ddl + 1
Case "BIN"
Let Bin = Bin + 1
Case "CPA"
Let Cpa = Cpa + 1
Case "VP"
Let Vp = Vp + 1
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Case "BAG"
Let Bag = Bag + 1
Case "XML"
Let Xml = Xml + 1
Case "JS"
Let Js = Js + 1
Case "GDL"
Let Gdl = Gdl + 1
Case "CAB"
Let Cab = Cab + 1
Case "INI"
Let Ini = Ini + 1
Case "CAT"
Let Cat = Cat + 1
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Case "INF"
Let Inf = Inf + 1
Case "PNF"
Let Pnf = Pnf + 1
Case "GPD"
Let Gpd = Gpd + 1
Case "EXE"
Let Exe = Exe + 1
' sam
Case "SAM"
Let Sam = Sam + 1
'inf_loc Pnf HLP NTF Ppd TBL ICC DAT
Case "INF_LOC"
Let Inf_loc = Inf_loc + 1
Case "HLP"
Let Hlp = Hlp + 1
Case "NTF"
Let Ntf = Ntf + 1
Case "PPD"
Let Ppd = Ppd + 1
Case "TBL"
Let Tbl = Tbl + 1
Case "ICC"
Let Icc = Icc + 1
Case "DAT"
Let Dat = Dat + 1
'Dim Dpb As Long, Cty As Long, Msc As Long, Xst As Long
Case "DPB"
Let Dpb = Dpb + 1
Case "CTY"
Let Cty = Cty + 1
Case "MSC"
Let Msc = Msc + 1
Case "XST"
Let Xst = Xst + 1
Case Else
Debug.Print "Case Else for single "" . "" " & arrFiles(RwCnt, ClCnt)
Let Els = Els + 1
End Select
ElseIf Len(arrFiles(RwCnt, ClCnt)) - Len(Replace(arrFiles(RwCnt, ClCnt), ".", "")) = 2 Then ' a thing like hidscanner.dll.mui or sdstor.sys.mui
' this next section catches double . . things
Dim DllMui As Long, SysMui As Long, Els2 As Long
Select Case UCase(Xtn)
Case "DLL.MUI"
Let DllMui = DllMui + 1
Case "SYS.MUI"
Let SysMui = SysMui + 1
Case Else
Debug.Print "Case Else for double "" . . "" " & arrFiles(RwCnt, ClCnt)
Let Els2 = Els2 + 1
End Select
ElseIf Len(arrFiles(RwCnt, ClCnt)) - Len(Replace(arrFiles(RwCnt, ClCnt), ".", "")) > 2 Then
' this section catches strings with dots more than 2
Dim LtsDts As Long
Debug.Print "More than 2 dots -- " & arrFiles(RwCnt, ClCnt)
Let LtsDts = LtsDts + 1
End If
Else ' not a file, ( well no . in it anyway )
' Dim Fldr As Long
' Debug.Print "Folder? " & arrFiles(RwCnt, ClCnt)
' Let Fldr = Fldr + 1
End If
End If ' end of case empty cell
End If ' end of folder is counted based on "G:\" in column B
Next ClCnt
Next RwCnt
Rem 4 output
Debug.Print "sys " & Sys
Debug.Print "dll " & Ddl
Debug.Print "bin " & Bin
Debug.Print "cpa " & Cpa
Debug.Print "vp " & Vp
Debug.Print "Else1 " & Els
'Dim Bag As Long, Xml As Long, Js As Long, Gdl As Long, Cab As Long, Ini As Long, Cat As Long
Debug.Print "bag " & Bag
Debug.Print "xml " & Xml
Debug.Print "js " & Js
Debug.Print "gdl " & Gdl
Debug.Print "cab " & Cab
Debug.Print "ini " & Ini
Debug.Print "cat " & Cat
' Inf As Long, Pnf As Long, Gpd As Long, Exe as long
Debug.Print "inf " & Inf
Debug.Print "pnf " & Pnf
Debug.Print "gpd " & Gpd
Debug.Print "exe " & Exe
' sam
Debug.Print "sam " & Sam
' inf_loc Pnf HLP NTF Ppd TBL ICC DAT
Debug.Print "inf_loc " & Inf_loc
Debug.Print "pnf " & Pnf
Debug.Print "hlp " & Hlp
Debug.Print "ntf " & Ntf
Debug.Print "ppd " & Ppd
Debug.Print "tbl " & Tbl
Debug.Print "icc " & Tbl
Debug.Print "dat " & Dat
' Dim Dpb As Long, Cty As Long, Msc As Long, Xst As Long
Debug.Print "dpb " & Dpb
Debug.Print "cty " & Cty
Debug.Print "msc " & Msc
Debug.Print "xst " & Xst
' Dim DllMui As Long, SysMui As Long, Els2 As Long
Debug.Print "dll.mui " & DllMui
Debug.Print "sys.mui " & SysMui
Debug.Print "Else2 " & Els2
Debug.Print "Total files is " & Els + Sys + Ddl + Bin + Cpa + Vp + Bag + Xml + Js + Gdl + Cab + Ini + Cat + Inf + Pnf + Gpd + Exe + Els2 + DllMui + SysMui + Sam + Inf_loc + Hlp + Ntf + Ppd + Tbl + Icc + Dat + Dpb + Cty + Msc + Xst
Debug.Print "Total Folders is " & Fldr
Debug.Print "Total things with more than 2 dots is " & LtsDts
End Sub

DocAElstein
02-26-2020, 02:38 AM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page14#post12324
This is matching Device Manager Properties to DriverStore

This is the first use of italicising, in plce of coloring to indicate the match, becaus we want to retain the colour as an indication that a match was found in drivers


Sub CompareDriverFilesDeviceManagerInDriverStore() ' http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page11#post12277
Rem 0
If ActiveSheet.Name <> "DeviceManagerProperties" Then
MsgBox prompt:="Oops": Exit Sub
Else
End If
Rem 1 Worksheets info
Dim WsDMP As Worksheet, WsDrSt As Worksheet
Set WsDMP = Worksheets("DeviceManagerProperties"): Set WsDrSt = Worksheets("DriverStore")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range. Each should be a cell in DeviceManagerProperties
Dim CelVl As String: Let CelVl = SrchForCel.Value
If CelVl <> "" And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
Dim FileNmeSrchFor As String
Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\") --- the characters count left over after the subtraction is equal to the character length of the file name
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=DriverStore!D5:DriverStore!F4437") '
Dim FndCel As Range: Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=DriverStore!D5"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
Rem 4 we have two matching cells
'4a) but we might already have a match,
If SrchForCel.Font.Color <> 0 Then ' Extra things to do if we already found the cell value in drivers
Let ClrIdx = SrchForCel.Font.ColorIndex ' this will make the line below to colorthe text of this cell redundant but will ensure that we use the same color in the DriverStore worksheet rather than the randomly generated one
WsDMP.Activate: SrchForCel.Select
Let SrchForCel.Font.Underline = True
Else
End If
'Debug.Print FndCel.Value
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsDMP.Activate: SrchForCel.Select ' This worksheet will be colured
Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx
Let SrchForCel.Font.Italic = True

WsDrSt.Activate: FndCel.Select ' the other workseet
Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Else ' No match was found - the thing in the cell in this worksheet is not in the other worksheet
End If
Else ' case no file path string in cell
End If
Next SrchForCel
End Sub

DocAElstein
02-29-2020, 10:34 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page18#post12360




Sub FileTypesHereInDeviceManagerPropertiesUndDriverSto reUnddrivers() ' http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page18#post12360
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("D2:F264")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long, Els2 As Long
Dim Ddl3 As Long, Sys3 As Long, Bin3 As Long, Cpa3 As Long, Vp3 As Long, Els3 As Long
Rem 3 Looping
'Dim ClCnt As Long, RwCnt As Long
Dim rngStr As Range ' a single cell to use as a stear element in the For Next loop
For Each rngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If rngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
'If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If Left(rngStr.Value, 3) = "C:\" And InStr(4, rngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(rngStr.Value, (InStr(4, rngStr.Value, ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1: If rngStr.Font.Italic = True Then Let Sys2 = Sys2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Sys3 = Sys3 + 1
Case "DLL"
Let Ddl = Ddl + 1: If rngStr.Font.Italic = True Then Let Ddl2 = Ddl2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Ddl3 = Ddl3 + 1
Case "BIN"
Let Bin = Bin + 1: If rngStr.Font.Italic = True Then Let Bin2 = Bin2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Bin3 = Bin3 + 1
Case "CPA"
Let Cpa = Cpa + 1: If rngStr.Font.Italic = True Then Let Cpa2 = Cpa2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Cpa3 = Cpa3 + 1
Case "VP"
Let Vp = Vp + 1: If rngStr.Font.Italic = True Then Let Vp2 = Vp2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Vp3 = Vp3 + 1
Case Else
Debug.Print "Case Else " & rngStr.Value
Let Els = Els + 1: If rngStr.Font.Italic = True Then Let Els2 = Els2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Els3 = Els3 + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next rngStr
Rem 4 output

Debug.Print "sys " & Sys & " (" & Sys2 & ") [" & Sys3 & "]"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ") [" & Ddl3 & "]"
Debug.Print "bin " & Bin & " (" & Bin2 & ") [" & Bin3 & "]"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ") [" & Cpa3 & "]"
Debug.Print "vp " & Vp & " (" & Vp2 & ") [" & Vp3 & "]"
Debug.Print "els " & Els & " (" & Els2 & ") [" & Els3 & "]"

Debug.Print "Totals " & Sys + Ddl + Bin + Cpa + Vp + Els & " (" & Sys2 + Ddl2 + Bin2 + Cpa2 + Vp2 + Els2 & ") [" & Sys3 + Ddl3 + Bin3 + Cpa3 + Vp3 + Els3 & "]"
End Sub

DocAElstein
03-03-2020, 01:10 AM
In support of this Thread: http://www.excelfox.com/forum/showthread.php/2421-copy-and-paste?p=12530#post12530



..save and close the sample2.xls and sample3.xlsb...

To help get syntax we can use a macro recording…


Macro recording for simple save..

Open sample2.xls
Open sample3.xlsb
Open sample1.xlsm

StartMacroRecording.JPG : https://imgur.com/4KAUJGa
NameRecordingMacro.JPG : https://imgur.com/AP6qdY2

Save sample2 xls.jpg : https://imgur.com/JhQEZzv
Close sample2 xls.JPG : https://imgur.com/aEKtCTN

Save sample3 xlsb.JPG : https://imgur.com/ontjd4z
Close sample3 xlsb.JPG : https://imgur.com/kbDEhfm

Stop Recording Macro.JPG : https://imgur.com/loqaTkc

Recorded Macro.JPG : https://imgur.com/SFY0jcW




Sub AvASave()
'
' AvASave Makro
'

'
Windows("sample2.xls").Activate
ActiveWorkbook.Save
ActiveWorkbook.Close
Windows("sample3.xlsb").Activate
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub



Macro recording for Save As..

Open sample2.xls
Open sample3.xlsb
Open sample1.xlsm

StartMacroRecording.JPG : https://imgur.com/4KAUJGa
NameRecordingMacro2.JPG : https://imgur.com/mDEneOt

SaveAs sample2 xls.jpg : https://imgur.com/xjqgPRO , https://imgur.com/UpT3pAB
Close sample2 xls.JPG : https://imgur.com/aEKtCTN

SaveAs sample3 xlsb.JPG : https://imgur.com/QF5yo6L , https://imgur.com/hgyV1Tm
Close sample3 xlsb.JPG : https://imgur.com/kbDEhfm

Stop Recording Macro.JPG : https://imgur.com/loqaTkc

Recorded Macro2.JPG : https://imgur.com/zHm6DY2


Sub AvASaveAs()
'
' AvASaveAs Makro
'
Windows("sample2.xls").Activate
ActiveWorkbook.SaveAs Filename:= _
"F:\Excel0202015Jan2016\ExcelFox\vixer\sample2.xls", FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close
Windows("sample3.xlsb").Activate
ActiveWorkbook.SaveAs Filename:= _
"F:\Excel0202015Jan2016\ExcelFox\vixer\sample3.xlsb", FileFormat:=xlExcel12, _
CreateBackup:=False
ActiveWorkbook.Close
End Sub

DocAElstein
03-03-2020, 06:47 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page19#post12364



Sub FileTypesHereDoubleDriverFull()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("F5:G670")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long, Els2 As Long
Dim Inf2 As Long, Ini2 As Long, Cat2 As Long, Gpd2 As Long, Xml2 As Long, Gdl2 As Long
Dim Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Dim Js2 As Long, Dpd2 As Long, Ppd2 As Long, Cab2 As Long, Bag2 As Long, Exe2 As Long
Dim Dpb As Long
Dim Dpb2 As Long
Rem 3 Looping
'Dim ClCnt As Long, RwCnt As Long
Dim rngStr As Range ' a single cell to use as a stear element in the For Next loop
For Each rngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If rngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
'If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
'If Left(RngStr.Value, 3) = "C:\" And InStr(4, RngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, rngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(rngStr.Value, (InStr(2, rngStr.Value, ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1: If rngStr.Font.Color <> 0 Then Let Sys2 = Sys2 + 1
Case "DLL"
Let Ddl = Ddl + 1: If rngStr.Font.Color <> 0 Then Let Ddl2 = Ddl2 + 1
Case "BIN"
Let Bin = Bin + 1: If rngStr.Font.Color <> 0 Then Let Bin2 = Bin2 + 1
Case "CPA"
Let Cpa = Cpa + 1: If rngStr.Font.Color <> 0 Then Let Cpa2 = Cpa2 + 1
Case "VP"
Let Vp = Vp + 1: If rngStr.Font.Color <> 0 Then Let Vp2 = Vp2 + 1
' Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Case "INF"
Let Inf = Inf + 1: If rngStr.Font.Color <> 0 Then Let Inf2 = Inf2 + 1
Case "INI"
Let Ini = Ini + 1: If rngStr.Font.Color <> 0 Then Let Ini2 = Ini2 + 1
Case "CAT"
Let Cat = Cat + 1: If rngStr.Font.Color <> 0 Then Let Cat2 = Cat2 + 1
Case "GPD"
Let Gpd = Gpd + 1: If rngStr.Font.Color <> 0 Then Let Gpd2 = Gpd2 + 1
Case "XML"
Let Xml = Xml + 1: If rngStr.Font.Color <> 0 Then Let Xml2 = Xml2 + 1
Case "GDL"
Let Gdl = Gdl + 1: If rngStr.Font.Color <> 0 Then Let Gdl2 = Gdl2 + 1
' Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Case "JS"
Let Js = Js + 1: If rngStr.Font.Color <> 0 Then Let Js2 = Js2 + 1
Case "DPD"
Let Dpd = Dpd + 1: If rngStr.Font.Color <> 0 Then Let Dpd2 = Dpd2 + 1
Case "PPD"
Let Ppd = Ppd + 1: If rngStr.Font.Color <> 0 Then Let Ppd2 = Ppd2 + 1
Case "CAB"
Let Cab = Cab + 1: If rngStr.Font.Color <> 0 Then Let Cab2 = Cab2 + 1
Case "BAG"
Let Bag = Bag + 1: If rngStr.Font.Color <> 0 Then Let Bag2 = Bag2 + 1
Case "EXE"
Let Exe = Exe + 1: If rngStr.Font.Color <> 0 Then Let Exe2 = Exe2 + 1
' DPB
Case "DPB"
Let Dpb = Dpb + 1: If rngStr.Font.Color <> 0 Then Let Dpb2 = Dpb2 + 1


Case Else
Debug.Print "Case Else " & rngStr.Value
Let Els = Els + 1:: If rngStr.Font.Color <> 0 Then Let Els2 = Els2 + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next rngStr
Rem 4 output

Debug.Print "sys " & Sys & " (" & Sys2 & ")"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ")"
Debug.Print "bin " & Bin & " (" & Bin2 & ")"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ")"
Debug.Print "vp " & Vp & " (" & Vp2 & ")"
Debug.Print "els " & Els & " (" & Els2 & ")"
' Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Debug.Print "inf " & Inf & " (" & Inf2 & ")"
Debug.Print "ini " & Ini & " (" & Ini2 & ")"
Debug.Print "cat " & Cat & " (" & Cat2 & ")"
Debug.Print "gpd " & Gpd & " (" & Gpd2 & ")"
Debug.Print "xml " & Xml & " (" & Xml2 & ")"
Debug.Print "gdl " & Gdl & " (" & Gdl2 & ")"
' Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Debug.Print "js " & Js & " (" & Js2 & ")"
Debug.Print "dpd " & Dpd & " (" & Dpd2 & ")"
Debug.Print "cab " & Cab & " (" & Cab2 & ")"
Debug.Print "bag " & Bag & " (" & Bag2 & ")"
Debug.Print "ppd " & Ppd & " (" & Ppd2 & ")"
Debug.Print "exe " & Exe & " (" & Exe2 & ")"
' DPB
Debug.Print "dpb " & Dpb & " (" & Dpb2 & ")"

Debug.Print " Total " & Sys + Ddl + Bin + Cpa + Vp + Els + Inf + Ini + Cat + Gpd + Xml + Gdl + Js + Dpd + Cab + Bag + Ppd + Exe + Dpb & " (" & Sys2 + Ddl2 + Bin2 + Cpa2 + Vp2 + Els2 + Inf2 + Ini2 + Cat2 + Gpd2 + Xml2 + Gdl2 + Js2 + Dpd2 + Cab2 + Bag2 + Ppd2 + Exe2 + Dpb2 & ")"
End Sub

DocAElstein
03-03-2020, 10:04 PM
In support of this Post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page19#post12364


Sub Compare_drivers_In_DoubleDriver() ' http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page19#post12364
Rem 0
If ActiveSheet.Name <> "drivers" Then ' This macro was intended to be run from drivers to look for things from it in DoubleDriver
MsgBox prompt:="Oops": Exit Sub ' **the selection should be in drivers
Else
End If
Rem 1 Worksheets info
Dim WsDD As Worksheet, WsDrs As Worksheet
Set WsDD = Worksheets("DDAllBefore"): Set WsDrs = Worksheets("drivers")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range, **the selection should be in drivers
Dim CelVl As String: Let CelVl = SrchForCel.Value
If CelVl <> "" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
Dim FileNmeSrchFor As String
Let FileNmeSrchFor = Replace(CelVl, ".mui", "", 1, 1, vbBinaryCompare) ' Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\") --- the characters count left over after the subtraction is equal to the character length of the file name
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=DDAllBefore!D5:DDAllBefore!G670") '
Dim FndCel As Range: Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=DDAllBefore!D5"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
Rem 4 we have two matching cells
'Debug.Print FndCel.Value
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsDrs.Activate: SrchForCel.Select ' This worksheet will be colured
Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx

WsDD.Activate: FndCel.Select ' the other workseet, that being looked in for the file
Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Else ' No match was found - the thing in the cell in
End If
Else ' case no file path string in cell
End If
Next SrchForCel
End Sub







ExplorerBefore Double Driver V DriverStore Abort.xlsm : https://app.box.com/s/uqupktt1ppxar3frhg2n7tqbb9vn181e

DocAElstein
03-05-2020, 09:49 PM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page21#post12386


Sub CompareDriverFilesDoubleDriverInDriverStoreFindNex t() ' http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page21#post12386
Rem 0
If ActiveSheet.Name <> "DDAllBefore" Then
MsgBox prompt:="Oops": Exit Sub
Else
End If
Rem 1 Worksheets info
Dim WsDD As Worksheet, WsDrSt As Worksheet
Set WsDD = Worksheets("DDAllBefore"): Set WsDrSt = Worksheets("DriverStore")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range. Each should be a cell in DeviceManagerProperties
Dim CelVl As String: Let CelVl = SrchForCel.Value
'If CelVl <> "" And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If CelVl <> "" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file
Dim FileNmeSrchFor As String
'Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\") --- the characters count left over after the subtraction is equal to the character length of the file name
Let FileNmeSrchFor = CelVl ' In Double Drivers the cells are not shown as a full path, so the last line is not necerssary
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=DriverStore!D5:DriverStore!F4437") '
Dim FndCel As Range: Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=DriverStore!D5"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
Do While Not FndCel Is Nothing ' Start Find next loop =
Rem 4 we have two matching cells
'4a) but we might already have a match,
If SrchForCel.Font.Color <> 0 Then ' Extra things to do if we already found the cell value in drivers
Let ClrIdx = SrchForCel.Font.ColorIndex ' this will make the line below to colorthe text of this cell redundant but will ensure that we use the same color in the DriverStore worksheet rather than the randomly generated one
WsDD.Activate: SrchForCel.Select
Let SrchForCel.Font.Underline = True
Else
End If
'Debug.Print FndCel.Value
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsDD.Activate: SrchForCel.Select ' This worksheet will be colured
Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx
Let SrchForCel.Font.Italic = True

WsDrSt.Activate: FndCel.Select ' the other workseet
Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Set FndCel = Application.Range("=DriverStore!D" & FndCel.Row + 1 & ":DriverStore!F4437").Find(what:=FileNmeSrchFor, After:=Application.Range("=DriverStore!F4437"), LookIn:=xlValues, LookAt:=xlPart, searchorder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) '
Loop ' End Find next loop ========================
Else ' No match was found - the thing in the cell in this worksheet is not in the other worksheet
End If
Else ' case no file path string in cell
End If
Next SrchForCel
End Sub

DocAElstein
03-06-2020, 12:47 AM
Do While Loop start further down macro in support of this Post:




Sub CompareDriverFilesDoubleDriverInDriverStoreFindNex t() ' http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page21#post12386
Rem 0
If ActiveSheet.Name <> "DDAllBefore" Then
MsgBox prompt:="Oops": Exit Sub
Else
End If
Rem 1 Worksheets info
Dim WsDD As Worksheet, WsDrSt As Worksheet
Set WsDD = Worksheets("DDAllBefore"): Set WsDrSt = Worksheets("DriverStore")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range. Each should be a cell in DeviceManagerProperties
Dim CelVl As String: Let CelVl = SrchForCel.Value
'If CelVl <> "" And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If CelVl <> "" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file
Dim FileNmeSrchFor As String
'Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\") --- the characters count left over after the subtraction is equal to the character length of the file name
Let FileNmeSrchFor = CelVl ' In Double Drivers the cells are not shown as a full path, so the last line is not necerssary
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=DriverStore!D5:DriverStore!F4437") '
Dim FndCel As Range: Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=DriverStore!D5"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
'Do While Not FndCel Is Nothing ' Start Find next loop =
Rem 4 we have two matching cells
'4a) but we might already have a match,
If SrchForCel.Font.Color <> 0 Then ' Extra things to do if we already found the cell value in drivers
Let ClrIdx = SrchForCel.Font.ColorIndex ' this will make the line below to colorthe text of this cell redundant but will ensure that we use the same color in the DriverStore worksheet rather than the randomly generated one
WsDD.Activate: SrchForCel.Select
Let SrchForCel.Font.Underline = True
Else
End If
'Debug.Print FndCel.Value
Do While Not FndCel Is Nothing ' Start Find next loop ======
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsDD.Activate: SrchForCel.Select ' This worksheet will be colured
Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx
Let SrchForCel.Font.Italic = True

WsDrSt.Activate: FndCel.Select ' the other workseet
Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Set FndCel = Application.Range("=DriverStore!D" & FndCel.Row + 1 & ":DriverStore!F4437").Find(what:=FileNmeSrchFor, After:=Application.Range("=DriverStore!F4437"), LookIn:=xlValues, LookAt:=xlPart, searchorder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) '
Loop ' End Find next loop =================================
Else ' No match was found - the thing in the cell in this worksheet is not in the other worksheet
End If
Else ' case no file path string in cell
End If
Next SrchForCel
End Sub

DocAElstein
03-06-2020, 08:27 PM
In support of answer for this Thread:
http://www.excelfox.com/forum/showthread.php/2425-Copy-and-paste-by-highlighted-colour


Initial 1.xlsx
_____ Workbook: 1.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G

1
Stock Name








2
A2
22
32
42
52
62
72


3
A3
23
33
43
53
63
73


4
A4
24
34
44
54
64
74


5
A5
25
35
45
55
65
75


6
A6
26
36
46
56
66
76


7
A7
27
37
47
57
67
77


8
A8
28
38
48
58
68
78
Worksheet: Tabelle1


After the following code section we have a modified worksheet

Rem 2 .... initial adjustment so that I can detect the highlighted cells in a different way
Dim Rng As Range
For Each Rng In Ws1.UsedRange.Offset(0, 2).Resize(, Ws1.UsedRange.Columns.Count - 1)
If Rng.Interior.Color = 65535 Then
Let Rng.Value = "=" & """" & Rng.Value & """"
Else
End If

_____ Workbook: 1.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H

1
Stock Name









2
A2
22
32
42
52
62
72



3
A3
23
="33"
43
53
63
73



4
A4
24
34
44
="54"
64
="74"



5
A5
25
35
="45"
55
65
75



6
A6
26
36
46
56
66
76



7
A7
27
37
47
57
="67"
77



8
A8
28
38
48
58
68
78



9








Worksheet: Tabelle1

First worksheet in 2.xlsx, before running macro, showing the Matched A5 in row 6
_____ Workbook: 2.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M

1Symbol


2xH2


3rH3


4fH4


5gdgH5


6A5H6


7
5H7


8hH8


9
Worksheet: Tabelle1


After running macro:-
_____ Workbook: 2.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L

1Symbol


2xH2


3rH3


4fH4


5gdgH5


6A5H645


7
5H7


8hH8


9
Worksheet: Tabelle1



1.xlsx : https://app.box.com/s/dgufdfvw3lm3knkvwvp0xgiqpwarqf69
2.xlsx : https://app.box.com/s/51cykk4zd6ldan8puz70o3zyj0e17rwf
macro.xlsm : https://app.box.com/s/tbis0g4n6l6386df6xjwh4cirbtgphzl

DocAElstein
03-07-2020, 06:52 PM
In support of this Forum post:
http://www.excelfox.com/forum/showthread.php/2425-Copy-and-paste-by-highlighted-colour-Paste-Highlighted-Cells-From-Matched-Column-Rows?p=12575&viewfull=1#post12575


Before:
_____ Workbook: 1.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M

1Stock NameDataDataDataDataDataDataDataDataDataDataDataDa ta


2ACC
800
700
600
500
400
300
200
100
90
80
70


3ADANIENT
800
700
600
500
400
300
200
100
90
80
70


4ADANIPORTS
800
700
600
500
400
300
200
100
90
80
70If there are no highlighted colour cells in the row then copy paste the firt cells of that row i. e 800(B4)


5ADANIPOWER
800
700
600
500
400
300
200
100
90
80
70and sorry Doc Sir one mistake happened from my end in providing the info to u , we have to copy and paste the data after highlighted colours cells


6AMARAJABAT
800
700
600
500
400
300
200
100
90
80
70And one more thing plz see A8 it doesnt have highlighted colour cells in that row then we have to copy and paste the first cell i. e B8(800)but A8 will not match with column B of 2.xlsx so ignore that don't do anything for that just ignore it


7AMBUJACEM
800
700
600
500
400
300
200
100
90
80
70


8ONGC
800
700
600
500
400
300
200
100
90
80
70


9
Worksheet: Sheet1
_____ Workbook: 2.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M

1ExchangeSymbolSeries/ExpiryOpenHighLow Prev CloseLTP


2NSEACCEQ
130
132.7
127.4
139.1
130.3


3NSEAMARAJABATEQ
102.35
104.7
101
105.65
103.55


4NSEADANIENTEQ
215.1
216.65
207.5
221.75
210.35


5NSEAMBUJACEMEQ
198.75
202.4
195.4
204.4
201.05


6NSEADANIPORTSEQ
339.8
339.8
331.25
349.15
336.35


7NSEADANIPOWEREQ
268
273.65
253.95
288.5
270.1


8
Worksheet: Sheet1
need match column A stock name of 1.xlsx with column B of 2. xlsx and if it matches then we have to copy and paste the data after highlighted colours cells in that row of 1.xlsx and paste it to column L OF 2.xlsx

If there are no highlighted colour cells in the row then copy paste the firt cells of that row i. e 800(B4)
And one more thing plz see A8 it doesnt have highlighted colour cells in that row then we have to copy and paste the first cell i. e B8(800)but A8 will not match with column B of 2.xlsx so ignore that don't do anything for that just ignore it


here is after
_____ Workbook: 2.xlsx ( Using Excel 2007 32 bit )
Row\Col
A
B
C
D
E
F
G
H
I
J
K
L
M

1ExchangeSymbolSeries/ExpiryOpenHighLow Prev CloseLTP


2NSEACCEQ
130
132.7
127.4
139.1
130.3
400


3NSEAMARAJABATEQ
102.35
104.7
101
105.65
103.55
300


4NSEADANIENTEQ
215.1
216.65
207.5
221.75
210.35
600


5NSEAMBUJACEMEQ
198.75
202.4
195.4
204.4
201.05
800


6NSEADANIPORTSEQ
339.8
339.8
331.25
349.15
336.35
800


7NSEADANIPOWEREQ
268
273.65
253.95
288.5
270.1
200


8
Worksheet: Sheet1

_.______________________

here is latest macro, in next post....

DocAElstein
03-07-2020, 06:52 PM
Macro for last post

Sub PasteHighlightedCellsFromMatchedColumnRows2() ' http://www.excelfox.com/forum/showthread.php/2425-Copy-and-paste-by-highlighted-colour-Paste-Highlighted-Cells-From-Matched-Column-Rows?p=12575&viewfull=1#post12575
Rem 1 Worksheets info
Dim Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Workbooks("1.xlsx").Worksheets.Item("Sheet1"): Set Ws2 = Workbooks("2.xlsx").Worksheets.Item("Sheet1")
Rem 2 .... initial adjustment so that I can detect the highlighted cells in a different way
Dim Rng As Range
' For Each Rng In Ws1.UsedRange.Offset(0, 2).Resize(, Ws1.UsedRange.Columns.Count - 2) ' We are intersted in the range offset 2 columns to the left of size 2 columns less than the main used range
For Each Rng In Ws1.Range("A2:L" & Ws1.UsedRange.Rows.Count & "")
If Rng.Interior.Color = 65535 Then
Let Rng.Value = "=" & """" & Rng.Value & """"
Else
End If
Next Rng
Rem 3 match column A stock name of 1.xlsx with column B of 2.xlsx and if it matches then copy the yellow highlighted colured cell data in that row of 1.xlsx and paste it to column L OF 2.xlsx
Dim Lr1 As Long: Let Lr1 = Ws1.UsedRange.Rows.Count
For Each Rng In Ws1.Range("A2:A" & Lr1 & "") ' Ws1 column A
Dim Lr2 As Long: Let Lr2 = Ws2.UsedRange.Rows.Count
Dim SrchRng As Range: Set SrchRng = Ws2.Range("B2:B" & Lr2 & "")
Dim RngMtch As Range
Set RngMtch = SrchRng.Find(What:=Rng.Value, After:=Ws2.Range("B2"), LookAt:=xlWhole, searchorder:=xlNext, MatchCase:=True) '
If RngMtch Is Nothing Then

Else ' a cell from column a 1.xlsx is matched to a cell from column B 2.xlsx
Dim HigChk As Range
Set HigChk = Rng.Offset(0, 1).Resize(, Ws1.UsedRange.Columns.Count - 1).Find(What:="=", LookIn:=xlFormulas, LookAt:=xlPart)
If Not HigChk Is Nothing Then ' we found a highlighted cell -----------
' copy the yellow highlighted colured cell data in that row of 1.xlsx
Rng.Offset(0, 1).Resize(, Ws1.UsedRange.Columns.Count - 1).SpecialCells(xlCellTypeFormulas, xlNumbers + xlTextValues).Offset(0, 1).Copy
' paste it to column L OF 2.xlsx
Else ' case no highlighted cell, so column B should be copüied from 1.xlsx
Rng.Offset(0, 1).Copy
End If ' we were looking for highligted cell ---
Ws2.Range("L" & RngMtch.Row & "").PasteSpecial Paste:=xlPasteValues
End If
Next Rng ' Ws1 column A
Rem 4 save and close both the file after doing the process
Workbooks("1.xlsx").Close savechanges:=False
Workbooks("2.xlsx").Close savechanges:=True
End Sub




1.xlsx : https://app.box.com/s/dgufdfvw3lm3knkvwvp0xgiqpwarqf69
2.xlsx : https://app.box.com/s/51cykk4zd6ldan8puz70o3zyj0e17rwf
macro.xlsm : https://app.box.com/s/tbis0g4n6l6386df6xjwh4cirbtgphzl

DocAElstein
03-09-2020, 01:51 AM
In support of this Thread
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page29#post12481





Sub FileTypesHereDoubleDriverFull_Clamers_SquareBracke ts()
Rem 1 Worksheets info
Dim Ws As Worksheet: Set Ws = Me
Dim Rng As Range: Set Rng = Ws.Range("F5:G670")
'Dim arrFiles() As Variant: Let arrFiles() = Rng.Value2
Rem 2 File extension types
Dim Ddl As Long, Sys As Long, Bin As Long, Cpa As Long, Vp As Long, Els As Long
Dim Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Dim Ddl2 As Long, Sys2 As Long, Bin2 As Long, Cpa2 As Long, Vp2 As Long, Els2 As Long
Dim Inf2 As Long, Ini2 As Long, Cat2 As Long, Gpd2 As Long, Xml2 As Long, Gdl2 As Long
Dim Ddl3 As Long, Sys3 As Long, Bin3 As Long, Cpa3 As Long, Vp3 As Long, Els3 As Long
Dim Inf3 As Long, Ini3 As Long, Cat3 As Long, Gpd3 As Long, Xml3 As Long, Gdl3 As Long
Dim Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Dim Js2 As Long, Dpd2 As Long, Ppd2 As Long, Cab2 As Long, Bag2 As Long, Exe2 As Long
Dim Js3 As Long, Dpd3 As Long, Ppd3 As Long, Cab3 As Long, Bag3 As Long, Exe3 As Long
Dim Dpb As Long
Dim Dpb2 As Long
Dim Dpb3 As Long
Rem 3 Looping
'Dim ClCnt As Long, RwCnt As Long
Dim rngStr As Range ' a single cell to use as a stear element in the For Next loop
For Each rngStr In Rng
' For RwCnt = 1 To UBound(arrFiles(), 1)
' For ClCnt = 1 To UBound(arrFiles(), 2)
'If arrFiles(RwCnt, ClCnt) = "" Then
If rngStr.Value = "" Then
' Empty cell, so do nothing
Else ' Time to look at cell value
'If Left(arrFiles(RwCnt, ClCnt), 3) = "C:\" And InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
'If Left(RngStr.Value, 3) = "C:\" And InStr(4, RngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If InStr(2, rngStr.Value, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
' Get the extension
Dim Xtn As String
'Let Xtn = Mid(arrFiles(RwCnt, ClCnt), (InStr(4, arrFiles(RwCnt, ClCnt), ".", vbBinaryCompare) + 1))
Let Xtn = Mid(rngStr.Value, (InStr(2, rngStr.Value, ".", vbBinaryCompare) + 1))
Select Case UCase(Xtn)
Case "SYS"
Let Sys = Sys + 1: If rngStr.Font.Color <> 0 Then Let Sys2 = Sys2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Sys3 = Sys3 + 1
Case "DLL"
Let Ddl = Ddl + 1: If rngStr.Font.Color <> 0 Then Let Ddl2 = Ddl2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Ddl3 = Ddl3 + 1
Case "BIN"
Let Bin = Bin + 1: If rngStr.Font.Color <> 0 Then Let Bin2 = Bin2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Bin3 = Bin3 + 1
Case "CPA"
Let Cpa = Cpa + 1: If rngStr.Font.Color <> 0 Then Let Cpa2 = Cpa2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Cpa3 = Cpa3 + 1
Case "VP"
Let Vp = Vp + 1: If rngStr.Font.Color <> 0 Then Let Vp2 = Vp2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Vp3 = Vp3 + 1
' Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Case "INF"
Let Inf = Inf + 1: If rngStr.Font.Color <> 0 Then Let Inf2 = Inf2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Inf3 = Inf3 + 1
Case "INI"
Let Ini = Ini + 1: If rngStr.Font.Color <> 0 Then Let Ini2 = Ini2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Ini3 = Ini3 + 1
Case "CAT"
Let Cat = Cat + 1: If rngStr.Font.Color <> 0 Then Let Cat2 = Cat2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Cat3 = Cat3 + 1
Case "GPD"
Let Gpd = Gpd + 1: If rngStr.Font.Color <> 0 Then Let Gpd2 = Gpd2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Gpd3 = Gpd3 + 1
Case "XML"
Let Xml = Xml + 1: If rngStr.Font.Color <> 0 Then Let Xml2 = Xml2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Xml3 = Xml3 + 1
Case "GDL"
Let Gdl = Gdl + 1: If rngStr.Font.Color <> 0 Then Let Gdl2 = Gdl2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Gdl3 = Gdl3 + 1
' Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Case "JS"
Let Js = Js + 1: If rngStr.Font.Color <> 0 Then Let Js2 = Js2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Js3 = Js3 + 1
Case "DPD"
Let Dpd = Dpd + 1: If rngStr.Font.Color <> 0 Then Let Dpd2 = Dpd2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Dpd3 = Dpd3 + 1
Case "PPD"
Let Ppd = Ppd + 1: If rngStr.Font.Color <> 0 Then Let Ppd2 = Ppd2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Ppd3 = Ppd3 + 1
Case "CAB"
Let Cab = Cab + 1: If rngStr.Font.Color <> 0 Then Let Cab2 = Cab2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Cab3 = Cab3 + 1
Case "BAG"
Let Bag = Bag + 1: If rngStr.Font.Color <> 0 Then Let Bag2 = Bag2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Bag3 = Bag3 + 1
Case "EXE"
Let Exe = Exe + 1: If rngStr.Font.Color <> 0 Then Let Exe2 = Exe2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Exe3 = Exe3 + 1
' DPB
Case "DPB"
Let Dpb = Dpb + 1: If rngStr.Font.Color <> 0 Then Let Dpb2 = Dpb2 + 1: If rngStr.Font.Underline = xlUnderlineStyleSingle Then Let Dpd3 = Dpd3 + 1


Case Else
Debug.Print "Case Else " & rngStr.Value
Let Els = Els + 1:: If rngStr.Font.Color <> 0 Then Let Els2 = Els2 + 1
End Select
Else ' not a file path
End If
End If
' Next ClCnt
' Next RwCnt
Next rngStr
Rem 4 output

Debug.Print "sys " & Sys & " (" & Sys2 & ") [" & Sys3 & "]"
Debug.Print "dll " & Ddl & " (" & Ddl2 & ") [" & Ddl3 & "]"
Debug.Print "bin " & Bin & " (" & Bin2 & ") [" & Bin3 & "]"
Debug.Print "cpa " & Cpa & " (" & Cpa2 & ") [" & Cpa3 & "]"
Debug.Print "vp " & Vp & " (" & Vp2 & ") [" & Vp3 & "]"
Debug.Print "els " & Els & " (" & Els2 & ")"
' Inf As Long, Ini As Long, Cat As Long, Gpd As Long, Xml As Long, Gdl As Long
Debug.Print "inf " & Inf & " (" & Inf2 & ") [" & Inf3 & "]"
Debug.Print "ini " & Ini & " (" & Ini2 & ") [" & Ini3 & "]"
Debug.Print "cat " & Cat & " (" & Cat2 & ") [" & Cat3 & "]"
Debug.Print "gpd " & Gpd & " (" & Gpd2 & ") [" & Gpd3 & "]"
Debug.Print "xml " & Xml & " (" & Xml2 & ") [" & Xml3 & "]"
Debug.Print "gdl " & Gdl & " (" & Gdl2 & ") [" & Gdl3 & "]"
' Js As Long, Dpd As Long, Ppd As Long, Cab As Long, Bag As Long, Exe As Long
Debug.Print "js " & Js & " (" & Js2 & ") [" & Js3 & "]"
Debug.Print "dpd " & Dpd & " (" & Dpd2 & ") [" & Dpd3 & "]"
Debug.Print "cab " & Cab & " (" & Cab2 & ") [" & Cab3 & "]"
Debug.Print "bag " & Bag & " (" & Bag2 & ") [" & Bag3 & "]"
Debug.Print "ppd " & Ppd & " (" & Ppd2 & ") [" & Ppd3 & "]"
Debug.Print "exe " & Exe & " (" & Exe2 & ") [" & Exe3 & "]"
' DPB
Debug.Print "dpb " & Dpb & " (" & Dpb2 & ") [" & Dpb3 & "]"

Debug.Print " Total " & Sys + Ddl + Bin + Cpa + Vp + Els + Inf + Ini + Cat + Gpd + Xml + Gdl + Js + Dpd + Cab + Bag + Ppd + Exe + Dpb & " (" & Sys2 + Ddl2 + Bin2 + Cpa2 + Vp2 + Els2 + Inf2 + Ini2 + Cat2 + Gpd2 + Xml2 + Gdl2 + Js2 + Dpd2 + Cab2 + Bag2 + Ppd2 + Exe2 + Dpb2 & ") [" & Sys3 + Ddl3 + Bin3 + Cpa3 + Vp3 + Els3 + Inf3 + Ini3 + Cat3 + Gpd3 + Xml3 + Gdl3 + Js3 + Dpd3 + Cab3 + Bag3 + Ppd3 + Exe3 + Dpb3 & "]"
End Sub

DocAElstein
03-09-2020, 02:29 AM
In support of this post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page29#post12484



' Macro to color text of matching files in two worksheets
Sub CompareDriverFilesCommandIndrivers() '
Rem 0
If ActiveSheet.Name <> "PowerShell" Then
MsgBox prompt:="Oops": Exit Sub
Else
End If
Rem 1 Worksheets info
Dim Wsdr As Worksheet, WsCmd As Worksheet
Set Wsdr = Worksheets("drivers"): Set WsCmd = Worksheets("PowerShell")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range
Dim CelVl As String: Let CelVl = SrchForCel.Value
'If CelVl <> "" And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If CelVl <> "" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file and not a Folder name with a . in it
If Len(CelVl) > (InStr(4, CelVl, ".", vbBinaryCompare) + 3) Then
' case a lot of characters after the . so we probably have a Folder name
Else
Dim FileNmeSrchFor As String
Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\")
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=drivers!D4:drivers!E180") '
Dim FndCel As Range
Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=drivers!D4"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
Rem 4 we have two matching cells
'Debug.Print FndCel.Value
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsCmd.Activate: SrchForCel.Select
Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx
Wsdr.Activate: FndCel.Select
Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Else ' No match was found - the thing in the cell in
End If
End If ' end of check that the string with a . in it was a file
Else ' case no file string in cell
End If
Next SrchForCel
End Sub

DocAElstein
03-10-2020, 02:46 PM
In support of this Post
http://www.excelfox.com/forum/showthread.php/2408-Windows-10-and-Office-Excel/page29#post12485


' Macro to color text of matching files in two worksheets
Sub CompareDriverFilesCommandInDriverStore() '
Rem 0
If ActiveSheet.Name <> "PowerShell" Then
MsgBox prompt:="Oops": Exit Sub
Else
End If
Rem 1 Worksheets info
Dim WsDS As Worksheet, WsCmd As Worksheet
Set WsDS = Worksheets("DriverStore"): Set WsCmd = Worksheets("PowerShell")

Rem 2 Looking at each cell in the selection
' Random number between 3 and 56 to get color index for any matching file names (1 is black, 2 is white , up to 56 is other colors: 3 to 56 is like (0 to 53)+3 Rnd gives like 0-.99999 so (Int(Rnd*54))+3 is what we want
Dim ClrIdx As Long
Randomize: Let ClrIdx = (Int(Rnd * 54)) + 3

Dim SrchForCel As Range
For Each SrchForCel In Selection ' Take each cell in selected range
Dim CelVl As String: Let CelVl = SrchForCel.Value
'If CelVl <> "" And Left(CelVl, 3) = "C:\" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file path
If CelVl <> "" And InStr(4, CelVl, ".", vbBinaryCompare) > 1 Then ' use some criteria to check we have a file and not a Folder name with a . in it
If Len(CelVl) > (InStr(4, CelVl, ".", vbBinaryCompare) + 3) Then
' case a lot of characters after the . so we probably have a Folder name
Else
Dim FileNmeSrchFor As String
Let FileNmeSrchFor = Right(CelVl, (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))) ' Determine the file name as that looking from the right as many characters as (the total character number) - (the position looking from the right of a "\")
Rem 3 We now should have a file name, so we look for it in worksheet DDAllBefore
Dim SrchRng As Range: Set SrchRng = Application.Range("=DriverStore!D5:DriverStore!F4437") '
Dim FndCel As Range
Set FndCel = SrchRng.Find(what:=FileNmeSrchFor, After:=Application.Range("=DriverStore!D5"), LookAt:=xlPart, searchorder:=xlNext, MatchCase:=False) '
If Not FndCel Is Nothing Then ' the range is set, so the file string has been found in a cell in DDAllBefore
Rem 4 we have two matching cells
'Debug.Print FndCel.Value
'4b) color matching file names in each worksheet, we do the unecerssary activating and selecting so we can see what is going in
WsCmd.Activate: SrchForCel.Select
Application.Wait (Now + TimeValue("00:00:01"))
'Let SrchForCel.Characters(((InStrRev(CelVl, "\", -1, vbBinaryCompare)) + 1), (Len(CelVl)) - (InStrRev(CelVl, "\", -1, vbBinaryCompare))).Font.ColorIndex = ClrIdx
Let SrchForCel.Font.ColorIndex = ClrIdx
WsDS.Activate: FndCel.Select
Application.Wait (Now + TimeValue("00:00:02"))
Let FndCel.Font.ColorIndex = ClrIdx
Else ' No match was found - the thing in the cell in
End If
End If ' end of check that the string with a . in it was a file
Else ' case no file string in cell
End If
Next SrchForCel
End Sub